文章目录
前言
本文记录从零自学Java的核心知识点总结,包含20+实战代码片段、5大易错点解析及学习路线图

一、环境搭建与第一个程序
避坑重点:PATH配置与类名规范
public class HelloWorld { // 类名必须与文件名一致!
public static void main(String[] args) {
System.out.println("我的第一个Java程序!");
// 输出结果:我的第一个Java程序!
}
}
二、变量与数据类型那些坑
1. 基本类型陷阱
代码如下(示例):
int a = 10;
double b = 3.7;
int c = (int)(a + b); // 强制类型转换
System.out.println(c); // 输出:13(非13.7!)
// 浮点数精度问题
System.out.println(0.1 + 0.2 == 0.3); // false!
2.String的==和equals()
代码如下(示例):
String s1 = "优快云";
String s2 = new String("优快云");
System.out.println(s1 == s2); // false!比较地址
System.out.println(s1.equals(s2)); // true!比较内容
三、流程控制的经典套路
1. 循环中的短路运算
代码如下(示例):
// 查找第一个偶数
int[] nums = {1,3,5,4,7};
for(int num : nums) {
if(num % 2 == 0) {
System.out.println("找到偶数:" + num);
break; // 立即终止循环
}
}
2. Switch忘记break的灾难
代码如下(示例):
int day = 2;
switch(day) {
case 1: System.out.println("周一");
case 2: System.out.println("周二"); // 从此处开始执行!
case 3: System.out.println("周三"); // 会继续执行
default: System.out.println("无效日期");
}
// 输出:周二、周三、无效日期
四、面向对象编程(OOP)实战
1. 对象创建易错点
代码如下(示例):
// Student.java
public class Student {
private String name; // 必须用private保护!
// 构造方法重载
public Student() { this.name = "匿名"; }
public Student(String name) { this.name = name; }
// Getter/Setter规范
public String getName() { return name; }
}
// 测试类
Student s1 = new Student();
Student s2 = new Student("张三");
System.out.println(s2.getName()); // 输出:张三
2. 继承中的super关键字
代码如下(示例):
class Animal {
void eat() { System.out.println("动物进食"); }
}
class Cat extends Animal {
@Override
void eat() {
super.eat(); // 先调用父类方法
System.out.println("猫吃鱼");
}
}
五、异常处理:从红色文字到优雅解决
1. 对象创建易错点
代码如下(示例):
try {
int[] arr = new int[3];
System.out.println(arr[5]); // 数组越界!
} catch (ArrayIndexOutOfBoundsException e) {
System.err.println("错误:数组索引超出范围");
e.printStackTrace(); // 打印堆栈跟踪
} finally {
System.out.println("资源清理操作...");
}
新手建议:
- 不要用catch(Exception e)一锅端
- 自定义异常继承RuntimeException
六、代码规范:从"能跑就行"到"优雅易读"的觉醒
初学时常认为"代码能运行就是成功",直到参与团队协作才痛悟可读性才是代码的生命线。曾为节省行数写出这样的"天才"代码:
for(int i=0;i<10;i++) if(i%2==0)
System.out.print(i+(i<8?",":""));
一个月后自己调试时竟花了20分钟才理解这是"打印0到8的偶数"。现在严格遵守:
- 方法不超过20行:每个方法只解决一个具体问题
- 拒绝魔数:用MAX_RETRY_COUNT=3代替直接写数字
- 注释写why而非what:解释设计意图而非复现代码
七、调试能力:从盲目print到精准断点的进化
新手阶段遇到bug只会疯狂加System.out.println(),直到在多层循环中打印了50次变量值仍找不到问题。掌握调试器后实现了质变:
- 条件断点:在循环第100次时暂停
- 表达式追踪:实时监控list.size()>threshold
- 多线程调试:冻结干扰线程定位并发问题
经典案例:
某次ConcurrentModificationException异常,通过查看方法调用栈帧,发现是遍历集合时用remove()删除元素导致。从此明白:调试器是解开bug密码的X光机。
八、API文档:从恐惧逃避到主动拥抱的转折
最初看到JDK官方文档的英文和复杂描述就想逃避,直到被迫查阅String类源码:
public final class String
implements Serializable, Comparable<String>, CharSequence {
// JDK9后从char[]改为byte[]!
private final byte[] value;
}
发现宝藏:
- @since标签揭示版本演进(如isBlank()是JDK11新增)
- 方法注释藏有性能提示(如String.concat()建议用+代替)
- 异常说明预判风险(如SimpleDateFormat非线程安全)
心得:
官方文档像藏宝图,坚持每天读一个类的方法签名,三个月后突然发现自己能预测API设计逻辑。

总结
作为Java初学者,从环境搭建到第一个"Hello World"的喜悦,再到变量类型转换的陷阱、面向对象思想的领悟,每一步都充满挑战却收获颇丰——我深刻体会到编程是思维与耐心的双重修炼:语法错误教会我严谨,调试过程训练逻辑,OOP设计拓宽视野,而持续解决NullPointerException等经典异常的经历更让我明白,真正的成长不在于避免踩坑,而在于学会优雅地爬出每个坑,这三个月磕绊却坚定的学习旅程,最终在成功运行首个Spring项目时化作一句感慨:原来所有报错都是计算机在用另一种方式说"你再想想"。
927

被折叠的 条评论
为什么被折叠?



