在Java中,处理多个异常时不需要为每个异常类型编写单独的catch块。从Java 7开始,引入了多异常捕获(Multi-catch)语法,允许在一个catch块中捕获多种异常类型,从而简化代码结构、提升可读性。
使用竖线|分隔不同的异常类型,即可在一个catch块中同时处理多个异常:
catch (IOException | SQLException | NumberFormatException e) {
// 处理多种异常
}
注意:被捕获的异常类型必须是相互独立的,不能是彼此的子类或父类关系,否则编译器会报错。
当不同异常需要执行相同的恢复或日志记录逻辑时,多异常捕获特别有用。例如:
这样避免了重复代码,也减少了catch块的数量。
虽然多异常捕获提升了编码效率,但也有一些关键点需要注意:

以下是一个读取配置文件并解析数值的典型场景:
try {
String input = Files.readString(Path.of("config.txt"));
int value = Integer.parseInt(input.trim());
} catch (IOException | NumberFormatException e) {
System.err.println("配置加载失败:" + e.getMessage());
value = -1; // 设置默认值
}
这个例子中,无论是文件读取失败还是格式解析出错,都采用统一的降级策略。
基本上就这些。合理使用多异常捕获能让异常处理更简洁,但也要根据实际需求判断是否需要分别处理不同异常。关键是保持逻辑清晰,不为了省行数而牺牲可维护性。