2025年5月18日 星期日 乙巳(蛇)年 二月廿 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Java

Java 7多异常捕获

时间:10-11来源:作者:点击数:37

在 Java 7 之前,我们只能使用多个 catch 来捕获不同类型的异常,如下所示:

  • try{
  • // 可能会发生异常的语句
  • } catch (FileNotFoundException e) {
  • // 调用方法methodA处理
  • } catch (IOException e) {
  • // 调用方法methodA处理
  • } catch (ParseException e) {
  • // 调用方法methodA处理
  • }

虽然捕获到的异常类型不一样,但是处理代码都是相同的,都是调用 methodA() 函数,这种写法增加了代码量,显得非常笨拙。

为了解决以上问题,Java 7 推出了多异常捕获技术,也即一个 catch 可以捕获多个类型的异常,从而消除上面的冗余代码。

使用多异常捕获技术修改后的代码如下:

  • try{
  • // 可能会发生异常的语句
  • } catch (IOException | ParseException e) {
  • // 调用方法methodA处理
  • }

注意:由于 FileNotFoundException 属于 IOException 异常,IOException 异常可以捕获它的所有子类异常。所以不能写成 FileNotFoundException | IOException | ParseException 。

使用一个 catch 捕获多种类型的异常时需要注意以下两个地方:

  • 捕获多种类型的异常时,多种异常类型之间用竖线|隔开;
  • 捕获多种类型的异常时,异常变量有隐式的 final 修饰,因此程序不能对异常变量重新赋值。

下面程序示范了 Java 7 提供的多异常捕获。

  • public class Demo{
  • 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 行代码完全正确。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门