异常处理与问题排查
程序会失败。区别只在于:失败时是崩溃给你一脸懵,还是留下清晰线索。本周学习 异常,以及怎么读堆栈。
异常是什么
异常是程序运行期的「意外事件对象」。Java 里常见两类:
- 检查异常(Checked):编译期强制处理(如部分 IO)
- 运行时异常(Runtime):如
NullPointerException、IllegalArgumentException
入门阶段你遇到最多的是运行时异常。
try-catch-finally
public static int parseAge(String text) {
try {
return Integer.parseInt(text);
} catch (NumberFormatException e) {
System.out.println("年龄格式错误: " + text);
return -1;
} finally {
// 无论是否异常都会执行,常用于关闭资源
}
}
原则:
- 只捕获你能处理的异常
- 不要空的
catch (Exception e) {}把问题吞掉 - 留给调用方的错误,要带上上下文信息
抛出异常
public void setAge(int age) {
if (age <= 0 || age > 150) {
throw new IllegalArgumentException("非法年龄: " + age);
}
this.age = age;
}
这比默默设成 0 更负责任:问题暴露在发生处。
怎么读堆栈(超级重要)
报错时从 最上面第一条「你的代码」 看起:
Exception in thread "main" java.lang.NullPointerException
at com.eden.Student.introduce(Student.java:18)
at com.eden.Main.main(Main.java:10)
含义:Main.java 第 10 行调用了 introduce,在 Student.java 第 18 行空指针。去 18 行看谁是 null。
自定义异常(了解)
public class NotFoundException extends RuntimeException {
public NotFoundException(String message) {
super(message);
}
}
业务里「找不到学生」比扔一个含糊的 RuntimeException 更清晰。
本周练习清单
写在最后
排查能力是程序员的生产力本身。学习是第一生产力,而读懂报错是学习的加速器。
下周:Maven 与 Git——让项目告别「单文件裸奔」。
YoungGc · Eden手记
学习是第一生产力。
如发现有错误欢迎指正,欢迎交流,接受反驳。 -- by不为 :)

浙公网安备 33010602011771号