使用多个catch块分别处理不同异常,子类在前父类在后;2. Java 7+支持多异常捕获(|分隔),适用于相同处理逻辑且类型互不继承;3. 可捕获父类Exception统一处理,适合兜底但不够精确。根据场景选择方式,确保异常顺序正确、逻辑清晰。

在Java中捕获多种不同类型的异常,可以通过几种方式实现,根据代码结构和异常处理需求选择合适的方法。核心思路是确保异常被正确分类处理,同时避免重复或遗漏。
使用多个catch块分别处理
这是最常见的方式。try语句后跟多个catch块,每个块处理一种特定类型的异常。
异常的捕获顺序很重要:更具体的异常类应放在前面,父类异常放在后面,否则会引发编译错误。
- 先捕获子类异常,再捕获父类异常
- 避免“不可达的代码”错误
示例:
立即学习“Java免费学习笔记(深入)”;
try {
int result = 10 / Integer.parseInt(“0”);
} catch (NumberFormatException e) {
System.out.println(“数字格式异常”);
} catch (ArithmeticException e) {
System.out.println(“算术异常,比如除以零”);
}
使用多异常捕获(Java 7+)
当多个异常需要相同处理逻辑时,可以在一个catch块中捕获多种异常,用竖线(|)分隔。
这种方式减少代码重复,提升可读性。
- 适用于处理方式相同的异常
- 捕获的异常类型必须互不继承
示例:
立即学习“Java免费学习笔记(深入)”;
try {
String[] arr = new String[5];
arr[0].Length();
} catch (NullPointerException | ArrayIndexOutOfBoundsException e) {
System.out.println(“发生空指针或数组越界”);
}
捕获父类异常统一处理
如果不需要区分具体异常类型,可以直接捕获它们的共同父类,如Exception。
这种方法简单但不够精确,可能掩盖本应单独处理的问题。
适合顶层异常兜底,不推荐用于精细控制。
示例:
立即学习“Java免费学习笔记(深入)”;
try {
// 可能抛出多种异常的代码
} catch (Exception e) {
System.out.println(“发生了某种异常:” + e.getMessage());
}
基本上就这些。根据实际场景选择合适方式:需要差异化处理用多个catch,共性处理用多异常捕获,全局兜底可用Exception。关键是理清异常继承关系和处理逻辑。


