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自动关流,更简洁安全。
不是所有地方都要加,重点处理那些你预判可能发生、且能合理响应的异常:
catch(ArrayIndexOutOfBoundsException)代替if (i
实际编码中容易忽略的关键细节:
catch里只打印异常却不处理,等于“假装看见了”,问题还在catch块)会让调试变得极其困难catch里又抛新异常
时,记得用throw new XxxException("msg", e)保留原始堆栈
finally里写return,它会覆盖try或catch中的返回值基本上就这些。用对try-catch不是为了“让代码不报错”,而是让错误发生时,程序还能按你的意图继续运转或优雅退出。