try{
// 可能会发生异常的语句
} catch (FileNotFoundException e) {
// 调用方法methodA处理
} catch (IOException e) {
// 调用方法methodA处理
} catch (ParseException e) {
// 调用方法methodA处理
}
3 个不同类型的异常,要求捕获之后的处理都是调用 methodA 方法。为了解决这种问题,Java 7 推出了多异常捕获技术,可以把这些异常合并处理。上述代码修改如下:
try{
// 可能会发生异常的语句
} catch (IOException | ParseException e) {
// 调用方法methodA处理
}
注意:由于 FileNotFoundException 属于 IOException 异常,IOException 异常可以捕获它的所有子类异常。所以不能写成 FileNotFoundException | IOException | ParseException 。|隔开。
public class ExceptionTest {
public static void main(String[] args) {
try {
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
int c = a / b;
System.out.println("您输入的两个数相除的结果是:" + c);
} catch (IndexOutOfBoundsException | NumberFormatException | ArithmeticException e) {
System.out.println("程序发生了数组越界、数字格式异常、算术异常之一");
// 捕获多异常时,异常变量默认有final修饰
// 所以下面代码有错
e = new ArithmeticException("test");
} catch (Exception e) {
System.out.println("未知异常");
// 捕获一种类型的异常时,异常变量没有final修饰
// 所以下面代码完全正确
e = new RuntimeException("test");
}
}
}
上面程序中第一行粗体字代码使用了IndexOutOfBoundsException|NumberFormatException|ArithmeticException来定义异常类型,这就表明该 catch 块可以同时捕获这 3 种类型的异常。捕获多种类型的异常时,异常变量使用隐式的 final 修饰,因此上面程序的第 12 行代码将产生编译错误;捕获一种类型的异常时,异常变量没有 final 修饰,因此上面程序的第 17 行代码完全正确。
版权说明:Copyright © 广州松河信息科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州松河信息科技有限公司 版权所有