在 Java 中,多个 catch
块用于捕获/处理来自特定代码段的多个异常。一个 try
块可以有多个 catch
块来处理不同的异常。
多个 catch
块的语法
try {
} catch (ExceptionType1 e1) {
} catch (ExceptionType2 e2) {
} catch (ExceptionType3 e3) {
}
上述语句展示了三个 catch
块,但实际上您可以根据需要在单一 try
后面跟上任意数量的 catch
块。如果在受保护的代码中发生了异常,异常将被抛给列表中的第一个 catch
块。如果抛出的异常的数据类型与 ExceptionType1
匹配,那么它将在这个 catch
块被捕获。如果不匹配,异常将继续传递给第二个 catch
语句。这个过程将持续进行,直到异常被捕获或者没有匹配的 catch
块,此时当前方法停止执行并将异常传递给调用栈上的前一个方法。
使用多个 catch
块需要注意的事项
-
每次只能处理一种类型的异常。在受保护的代码中,只会抛出一种类型的异常,因此它只会在相关的
catch
块中被处理。
-
catch
块的顺序非常重要。应该按照从具体异常到通用异常的顺序排列。如果父类异常块出现在子类异常块之前,编译器将会报错并抛出编译时错误。
示例:Java 中的多个 catch
块
以下是一个代码段,展示了如何使用多个 try/catch
语句。在此示例中,我们通过除以零来制造一个错误。因为这不是 ArrayIndexOutOfBoundsException
,所以下一个 catch
块处理异常并打印详情。
package com.tutorialspoint;
public class ExcepTest {
public static void main(String args[]) {
try {
int a[] = new int[2];
int b = 0;
int c = 1/b;
System.out.println("访问第三个元素:" + a[3]);
}
catch (ArrayIndexOutOfBoundsException e) {
System.out.println("ArrayIndexOutOfBoundsException 抛出:" + e);
}catch (Exception e) {
System.out.println("Exception 抛出:" + e);
}
System.out.println("离开块");
}
}
输出:
Exception 抛出:java.lang.ArithmeticException: / by zero
离开块
使用多个 catch
块处理多个异常
在以下代码段中,我们展示了另一个使用多个 try/catch
语句的例子。在此示例中,我们通过除以零来制造一个错误,并使用 ArithmeticException
来处理它。
package com.tutorialspoint;
public class ExcepTest {
public static void main(String args[]) {
try {
int a[] = new int[2];
int b = 0;
int c = 1/b;
System.out.println("访问第三个元素:" + a[3]);
}
catch (ArithmeticException e) {
System.out.println("ArithmeticException 抛出:" + e);
}
catch (ArrayIndexOutOfBoundsException e) {
System.out.println("ArrayIndexOutOfBoundsException 抛出:" + e);
}catch (Exception e) {
System.out.println("Exception 抛出:" + e);
}
System.out.println("离开块");
}
}
输出:
ArithmeticException 抛出:java.lang.ArithmeticException: / by zero
离开块
在单个 catch
块中处理多个异常
从 Java 7 开始,您可以使用单个 catch
块来处理多个异常,这个特性简化了代码。
语法
catch (IOException|FileNotFoundException ex) {
logger.log(ex);
throw ex;
}
示例
以下是一个代码段,展示了如何在一个语句中使用多个 catch
。在此示例中,我们通过除以零来制造一个错误。在一个语句中处理 ArrayIndexOutOfBoundsException
和 ArithmeticException
。
package com.tutorialspoint;
public class ExcepTest {
public static void main(String args[]) {
try {
int a[] = new int[2];
int b = 0;
int c = 1/b;
System.out.println("访问第三个元素:" + a[3]);
}
catch (ArrayIndexOutOfBoundsException | ArithmeticException e) {
System.out.println("Exception 抛出:" + e);
}
System.out.println("离开块");
}
}
输出:
Exception 抛出:java.lang.ArithmeticException: / by zero
离开块