java 如何实现异常处理
Java 异常处理的基本结构
Java 通过 try-catch-finally 块实现异常处理。代码块中可能抛出异常的语句放在 try 中,异常捕获逻辑写在 catch 中,无论是否发生异常都会执行的代码放在 finally 中。
try {
// 可能抛出异常的代码
int result = 10 / 0; // 抛出 ArithmeticException
} catch (ArithmeticException e) {
// 捕获并处理异常
System.out.println("除零错误: " + e.getMessage());
} finally {
// 最终执行的代码(如资源释放)
System.out.println("执行结束");
}
捕获多类异常
通过多个 catch 块或使用 | 运算符(Java 7+)捕获多种异常类型。
try {
// 可能抛出多种异常的代码
int[] arr = new int[5];
arr[10] = 1; // 抛出 ArrayIndexOutOfBoundsException
} catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
System.out.println("异常类型: " + e.getClass().getSimpleName());
}
抛出异常
使用 throw 主动抛出异常,通常用于自定义逻辑验证。
void validateAge(int age) {
if (age < 0) {
throw new IllegalArgumentException("年龄不能为负数");
}
}
自定义异常
继承 Exception 或 RuntimeException 创建自定义异常类。
class CustomException extends RuntimeException {
CustomException(String message) {
super(message);
}
}
// 使用示例
throw new CustomException("自定义异常消息");
异常传播
方法声明中通过 throws 标记可能抛出的异常,调用者需处理或继续抛出。
void readFile() throws IOException {
// 可能抛出 IOException 的代码
Files.readAllLines(Paths.get("nonexistent.txt"));
}
// 调用者处理异常
try {
readFile();
} catch (IOException e) {
System.out.println("文件读取失败: " + e.getMessage());
}
try-with-resources
Java 7+ 引入的语法,自动关闭实现了 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("IO异常: " + e.getMessage());
}
最佳实践
- 精准捕获:避免笼统捕获
Exception,优先处理具体异常类型。 - 日志记录:使用日志工具(如 SLF4J)记录异常详细信息。
- 资源管理:优先使用
try-with-resources替代手动finally块。 - 避免空捕获:禁止空的
catch块,至少打印日志或恢复上下文。






