能力缺口:别再用 printStackTrace 把异常吞了
这门课解决的核心问题,是很多写 Java 的人在转岗或查漏补缺时最常暴露的短板:遇到编译报错就无脑加 throws Exception,线上报错只会看控制台的红字,或者写个空的 catch 块把异常直接吞掉。如果你的代码里满地都是 try-catch 却说不清为什么要这么圈,或者根本分不清受检异常和非受检异常在业务里该怎么取舍,那说明你对异常处理的理解还停留在“能让代码编译通过”的阶段。这门课适合已经掌握 Java 基本语法、能写循环和面向对象逻辑,但没在生产环境里正经处理过错误流转的学习者。你不需要有多并发或框架经验,但必须清楚方法调用栈是怎么回事,否则看到异常链传递时会卡壳。
阅读与练习顺序:从抓异常到抛异常的闭环
建议先看异常概述和打印异常信息这两块,把异常的类继承结构搞明白,知道 Error 和 Exception 的分界线在哪,以及 getMessage、printStackTrace、toString 这三种打印方式到底输出什么内容,别等排查线上问题时还要去猜。接着重点啃多重 catch 和 finally,这是最容易写错的地方。多重 catch 必须理解子类异常在前、父类异常在后的顺序约束,而 finally 要搞清楚它和 return 的执行先后,以及在 finally 里修改返回值会发生什么。看完这两块,再去碰 throw 和 throws,区分开“主动抛出一个异常对象”和“声明方法可能抛出异常类型”的差别。最后看异常链,理解为什么底层 IO 报错要包装成业务异常往上抛,以及 initCause 和带 cause 参数的构造方法怎么保留原始堆栈。资料配合练习时,不要光跟着视频敲一遍就完事,自己写几个有调用关系的方法,在最底层抛异常,在中间层捕获并重新包装抛出,在最外层打印完整堆栈,观察控制台输出里 Caused by 的链条是否和你预期一致。
学完应能独立做的事
看完这套资料,你应该能独立完成这几件事:拿到一段满是 throws Exception 的烂代码,能根据实际业务判断哪些异常该往上抛、哪些该就地捕获处理;写工具类方法时,参数不合法能主动用 throw 抛出 IllegalArgumentException,而不是等空指针在别处炸开;设计自定义业务异常类时,知道该继承 RuntimeException 还是 Exception,知道怎么把底层 SQLException 包进去并保留原始报错信息;写 finally 块时,能一眼看出当前代码有没有因为提前 return 导致资源没释放干净。如果你看完还不能回答“finally 块里抛了新异常,原来 catch 里捕获的异常会怎样”这个问题,说明异常链和 finally 的交叉部分没吃透,回头把这两节对照着再过一遍。
课程目录
1 异常概述 (17:54) 2 多重catch (17:53) 3 打印异常信息 (16:53) 4 finally (23:40) 5 throw、throws (23:16) 6 异常链 (27:42)





