Java Exception 与 Error 知识复盘总结
一、核心知识清单(必背要点)

  1. 继承与核心定位:Exception 和 Error 均继承自Throwable类,只有Throwable的子类实例可被throw抛出或catch捕获,这是两者的底层共性。
  2. 本质区别:
    ○ Exception:程序运行中的可处理异常,多因代码逻辑或外部环境问题导致(如文件不存在、空指针),可通过代码修复或补救恢复程序流程。
    ○ Error:JVM 级别的严重错误,多因系统资源耗尽(如内存溢出、栈溢出)导致,程序无法通过代码处理,只能提前优化避免。
  3. Exception 分类与处理要求:
    ○ Checked Exception(编译时异常):如IOException,编译阶段强制显式处理(try-catch捕获或throws声明),否则编译失败。
    ○ Unchecked Exception(运行时异常):如NullPointerException,继承自RuntimeException,无需显式处理,编译不报错,需通过优化代码逻辑避免。
  4. 异常处理核心原则:
    ○ 捕获顺序:先捕获子类异常,再捕获父类异常(如先catch IOException,再catch Exception),避免子类异常处理逻辑失效。
    ○ 禁止 “吞异常”:捕获异常后需处理(记录日志、业务回滚)或重新抛出,禁止仅打印日志不传递,防止上层误判操作成功。
    ○ 不滥用通用捕获:避免直接catch Exception,防止掩盖不同异常的真实原因,增加问题排查难度。
    二、学习与面试表现分析
  5. 优势:
    ○ 基础认知扎实:能准确区分 Exception 与 Error 的本质差异,清晰掌握 Exception 的两类分类及基本处理要求。
    ○ 场景关联能力:可结合简单开发场景(如文件读取、用户注册)说明异常处理逻辑,初步具备知识应用意识。
  6. 不足:
    ○ 细节深度不足:对异常捕获顺序的底层逻辑、“异常传递与业务状态一致性” 的关联(如转账事务场景)表述不够精准。
    ○ 风险分析薄弱:对 “异常被吞”“finally 块 return” 等高频错误场景的危害,缺乏场景化、深入的后果推导(如金融场景的资金纠纷风险)。
  7. 掌握度评分:7 分(满分 10 分)。核心知识点已理解,但异常处理最佳实践的细节、场景化风险分析需进一步强化。
    三、高频漏洞标记(优先复习项)
  8. 异常捕获顺序:易混淆 “先父类后子类” 的错误逻辑,需重点记忆 “先子类、后父类” 的原则,可结合代码示例(如先catch IOException再catch Exception)强化理解,避免处理逻辑失效。
  9. 异常传递的意义:易忽略 “异常传递与业务状态” 的关联,需明确:异常传递不仅是 “告知上层错误”,更是保障事务一致性的关键(如转账失败时,需抛出异常触发事务回滚,避免 “扣款成功但入账失败” 的业务漏洞)。
  10. finally 块的禁忌操作:对 “finally 块中 return” 的危害不熟悉,需重点掌握:finally 块的 return 会覆盖 try/catch 块的返回值或异常,导致程序逻辑混乱(如 try 块 return 1,finally 块 return 2,最终返回 2)。
  11. 在springboot项目中,throw抛出异常,即告知上流这里有错误,然后其他的异常捕捉只是让这个更加优雅,即不会直接造成程序崩溃,或者告知用户哪里错了(比如用户名格式错误,抛出自定义异常)
    throw的作用是 “终止当前错误流程并传递错误”,而非让代码 “正确执行”;Spring Boot 中抛出异常会终止当前操作/请求流程,但不会让整个项目停止,这也是异常机制保障系统稳定性的体现。
    四、复习与模拟指引
  12. 下次复习启动题:请说明 “在 finally 块中使用 return” 会导致什么问题?结合具体代码示例分析异常被屏蔽、返回值被覆盖的两种场景。
  13. 后续模拟方向:
    ○ 深入实战场景:模拟 “分布式系统中的异常处理”(如远程调用超时异常如何传递、事务回滚)。
    ○ 交叉对比:补充 “自定义异常的设计场景与实现方式”,对比自定义异常与 JDK 内置异常的使用差异。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐