Java中try-catch用于捕获处理运行时异常,避免程序意外终止;需将可能出错代码放入try块,对应处理逻辑写在catch块,finally用于资源清理;多catch时子类异常须在父类前;JDK 7+推荐try-with-resources。

Java中try-catch用于捕获并处理运行时可能出现的异常,避免程序因未处理的异常而意外终止。核心是把可能出错的代码放进try块,把应对措施写在catch块里,必要时用finally做收尾工作。
基本语法结构要写全
一个完整的try-catch至少包含try和至少一个catch,finally可选但建议在需要资源清理时加上:
-
try块里只能放可能抛异常的语句,不能为空 - 每个
catch必须声明具体异常类型,不能写泛泛的Exception就完事(除非真要兜底) - 多个
catch时,子类异常要写在父类前面,否则编译报错 -
finally总会执行(除非JVM退出),适合关文件、释放连接等操作
常见写法示例
比如读取文件内容,容易遇到FileNotFoundException或IOException:
FileReader reader = null;
try {
reader = new FileReader("data.txt");
int ch = reader.read();
System.out.println((char)ch);
} catch (FileNotFoundException e) {
System.err.println("文件没找到:" + e.getMessage());
} catch (IOException e) {
System.err.println("读取出错:" + e.getMessage());
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException ignored) {}
}
}
注意:JDK 7+推荐用try-with-resources自动关流,更简洁安全。
立即学习“Java免费学习笔记(深入)”;
什么时候该用try-catch
不是所有地方都要加,重点处理那些你预判可能发生、且能合理响应的异常:
- 外部依赖操作:文件读写、网络请求、数据库查询
- 用户输入解析:字符串转数字、日期格式转换
- 数组/集合访问:下标越界、空指针风险高的场景
- 不要用它来替代逻辑判断,比如用
catch(ArrayIndexOutOfBoundsException)代替if (i
别踩这些坑
实际编码中容易忽略的关键细节:
-
catch里只打印异常却不处理,等于“假装看见了”,问题还在 - 吞掉异常(空
catch块)会让调试变得极其困难 - 在
catch里又抛新异常时,记得用throw new XxxException("msg", e)保留原始堆栈 - 不要在
finally里写return,它会覆盖try或catch中的返回值
基本上就这些。用对try-catch不是为了“让代码不报错”,而是让错误发生时,程序还能按你的意图继续运转或优雅退出。










