java 如何处理异常
异常处理的基本概念
Java中的异常是程序运行时发生的意外事件,可能由代码错误、资源不足或外部问题引发。异常处理机制允许程序捕获并处理这些事件,避免程序崩溃。
try-catch 块
使用 try-catch 块捕获和处理异常。try 块包含可能抛出异常的代码,catch 块定义异常处理逻辑。
try {
// 可能抛出异常的代码
int result = 10 / 0;
} catch (ArithmeticException e) {
// 处理算术异常
System.out.println("除零错误: " + e.getMessage());
}
多重 catch 块
可以捕获多种异常类型,按顺序匹配。子类异常需放在父类异常之前。

try {
// 可能抛出多种异常的代码
int[] arr = new int[5];
arr[10] = 1;
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组越界: " + e.getMessage());
} catch (Exception e) {
System.out.println("通用异常: " + e.getMessage());
}
finally 块
无论是否发生异常,finally 块中的代码都会执行,常用于释放资源(如关闭文件或数据库连接)。
try {
// 可能抛出异常的代码
FileInputStream file = new FileInputStream("test.txt");
} catch (IOException e) {
System.out.println("文件读取错误: " + e.getMessage());
} finally {
System.out.println("资源清理完成");
}
throws 关键字
在方法声明中使用 throws 抛出异常,由调用者处理。适用于不直接处理异常的场景。

public void readFile() throws IOException {
FileInputStream file = new FileInputStream("test.txt");
}
throw 关键字
主动抛出自定义异常或重新抛出捕获的异常。
public void validateAge(int age) {
if (age < 18) {
throw new IllegalArgumentException("年龄必须大于18岁");
}
}
自定义异常
通过继承 Exception 或 RuntimeException 创建自定义异常类。
public class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
// 使用示例
try {
throw new CustomException("自定义异常示例");
} catch (CustomException e) {
System.out.println(e.getMessage());
}
异常链
通过构造方法或 initCause() 方法将底层异常传递给高层异常,保留完整的异常信息。
try {
// 底层操作
} catch (IOException e) {
throw new CustomException("高层异常").initCause(e);
}
最佳实践
- 捕获具体异常:避免笼统捕获
Exception,优先处理具体异常类型。 - 资源管理:使用
try-with-resources自动关闭资源(Java 7+)。 - 日志记录:使用日志工具(如 SLF4J)记录异常详细信息。
- 避免空 catch 块:至少打印异常信息或记录日志。
// try-with-resources 示例
try (FileInputStream file = new FileInputStream("test.txt")) {
// 自动关闭资源
} catch (IOException e) {
System.out.println("异常: " + e.getMessage());
}






