java如何捕捉异常
Java 异常捕捉基础
在 Java 中,异常捕捉主要通过 try-catch-finally 语句块实现。try 块包含可能抛出异常的代码,catch 块用于处理特定类型的异常,finally 块用于执行无论是否发生异常都必须运行的代码。
try {
// 可能抛出异常的代码
int result = 10 / 0;
} catch (ArithmeticException e) {
// 处理算术异常
System.out.println("除数不能为零");
} finally {
// 清理资源或后续操作
System.out.println("执行完毕");
}
多异常捕捉
Java 7 及以上版本支持在一个 catch 块中捕捉多个异常,用竖线 | 分隔异常类型。
try {
// 可能抛出多种异常的代码
int[] arr = new int[5];
arr[10] = 10 / 0;
} catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
System.out.println("发生算术异常或数组越界异常");
}
异常链与重新抛出
捕捉异常后可以重新抛出,或包装成更高级别的异常。通过 throw 关键字实现。
try {
// 可能抛出异常的代码
someMethod();
} catch (IOException e) {
// 包装成更高级别异常
throw new RuntimeException("IO 操作失败", e);
}
自定义异常
通过继承 Exception 或 RuntimeException 创建自定义异常类。
class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
// 使用自定义异常
try {
throw new CustomException("自定义异常示例");
} catch (CustomException e) {
System.out.println(e.getMessage());
}
try-with-resources
Java 7 引入 try-with-resources 语法,自动管理资源(如文件流、数据库连接)。资源需实现 AutoCloseable 接口。

try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.out.println("文件读取异常");
}
最佳实践
- 优先捕捉具体异常而非通用异常(如
Exception)。 - 避免空的
catch块,至少记录异常信息。 - 使用
finally块释放非自动管理资源。 - 在方法签名中声明可能抛出的检查异常(
throws)。






