多catch块需按继承关系从具体到宽泛排列,如filenotfoundexception在ioexception前;每个catch须有实质处理动作并记录关键信息;资源清理优先用try-with-resources,手动管理时finally中需判空并防二次异常。

多catch块不是为了堆代码,而是让每种异常都有对应的“对症处理”。用得准,错误定位快;顺序错,后面catch就成摆设。
按继承关系从具体到宽泛排列
Java要求子类异常必须写在父类异常之前。否则编译直接报错——因为一旦父类catch先匹配,子类catch永远没机会执行。
-
正确写法:先捕获
FileNotFoundException,再捕获IOException(前者是后者的子类) -
错误写法:把
Exception放在最前,后面所有具体异常都失效 - 常见继承链示例:
ArithmeticException → RuntimeException → Exception,捕获时按从前到后顺序
每个catch只做一件事,且要有实质动作
别让catch变成“收容所”。捕获了就要反馈、记录或恢复,空块等于埋雷。
- 至少调用
e.getMessage()输出关键信息,或用日志框架记录e完整对象 - 避免在catch里简单打印“出错了”,应说明“哪里错、为什么错、用户该怎么办”
- 比如
ArrayIndexOutOfBoundsException可提示“请求数据超出范围,请检查索引值”
配合finally或try-with-resources释放资源
多catch解决的是“怎么报错”,而资源清理决定“会不会留坑”。两者要协同,不能只顾一头。
- 文件流、数据库连接等必须关闭的资源,优先用
try-with-resources自动管理 - 若手动管理,
finally块里写关闭逻辑,且要判空+加try-catch防二次异常 - 注意:
finally在return之前执行,但不要在里面return,否则会覆盖原返回值
必要时合并同类异常,减少冗余
Java 7起支持一个catch捕获多种异常,适合处理方式完全一致的情况。
- 语法:
catch (IOException | SQLException e) - 适用场景:日志记录、统一返回错误码、重试逻辑等通用操作
- 不适用场景:需要差异化处理时,比如文件不存在和权限不足要给不同提示
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











