当前位置: 首页 > 面试题库 >

在Java中是否可以在同一catch块中捕获两个异常?

壤驷安和
2023-03-14
问题内容

我需要捕获两个异常,因为它们需要相同的处理逻辑。我想做类似的事情:

catch (Exception e, ExtendsRuntimeException re) {
    // common logic to handle both exceptions
}

是否可以避免在每个catch块中重复处理程序代码?


问题答案:

Java 7及更高版本

从Java
7开始,支持多异常捕获。

语法为:

try {
     // stuff
} catch (Exception1 | Exception2 ex) {
     // Handle both exceptions
}

的静态类型ex是列出的异常中最特殊的通用超类型。有一个很好的功能,如果您将其重新抛出ex编译器就会知道只能抛出列出的异常之一。

Java 6及更早版本

在Java 7之前,有多种方法可以解决此问题,但是它们往往比较笨拙并且有局限性。

方法1

try {
     // stuff
} catch (Exception1 ex) {
     handleException(ex);
} catch (Exception2 ex) {
     handleException(ex);
}

public void handleException(SuperException ex) {
     // handle exception here
}

如果异常处理程序需要访问在之前声明的局部变量,则这会变得很混乱try。而且,如果处理程序方法需要重新引发异常(并进行了检查),则签名会遇到严重问题。具体来说,handleException必须声明为throwing
SuperException…这可能意味着您必须更改封闭方法的签名,依此类推。

方法#2

try {
     // stuff
} catch (SuperException ex) {
     if (ex instanceof Exception1 || ex instanceof Exception2) {
         // handle exception
     } else {
         throw ex;
     }
}

同样,我们在签名方面存在潜在的问题。

方法#3

try {
     // stuff
} catch (SuperException ex) {
     if (ex instanceof Exception1 || ex instanceof Exception2) {
         // handle exception
     }
}

如果省略else零件(例如,因为目前没有其他子类型SuperException),则代码将变得更加脆弱。如果异常层次结构进行了重组,则没有的该处理程序else可能最终会悄悄地吞噬异常!



 类似资料:
  • 本文向大家介绍是否可以在单个catch块中捕获多个Java异常?,包括了是否可以在单个catch块中捕获多个Java异常?的使用技巧和注意事项,需要的朋友参考一下 例外是程序执行期间发生的问题(运行时错误)。发生异常时,程序会突然终止,并且生成异常的行之后的代码将永远不会执行。 代码中有多个异常 在Java 7之前,只要我们有一个可能会生成多个异常的代码,并且如果您需要专门处理该代码,则应在一次尝

  • 问题内容: 在Java中,我想做这样的事情: …代替: 有什么办法吗? 问题答案: 从Java 7开始,这已经成为可能。多捕获块的语法为: 但是请记住,如果所有异常都属于同一类层次结构,则可以简单地捕获该基本异常类型。 还要注意,如果从ExceptionA直接或间接继承了ExceptionB,则不能在同一块中同时捕获ExceptionA和ExceptionB。编译器会抱怨:

  • 问题内容: 我想一个更清洁的方式来获得以下功能,以捕捉和在一个块: 有什么办法吗?还是我必须分开抓住它们? 并具有一个共享的基类,但它们也与其他我要介绍的类型共享它,因此我不能只抓住基类。 问题答案: 更新: 从PHP 7.1开始,此功能可用。 语法为: 文件:https://www.php.net/manual/en/language.exceptions.php#example-287 RFC

  • Scala没有检查异常。但是,当从java调用scala代码时,希望捕获scala抛出的异常。 斯卡拉: Java:

  • 本文向大家介绍一个try块在Java中可以有多个catch块吗?,包括了一个try块在Java中可以有多个catch块吗?的使用技巧和注意事项,需要的朋友参考一下 是的,单个try块可以有多个catch块。 示例 以下Java程序包含一个数字数组(显示)。从用户那里,它接受此数组中的两个位置,然后将第一个位置的数字除以第二个位置的数字。 输入值时- 如果选择的位置不在显示的数组中,则抛出Array

  • 本文向大家介绍我们可以在Java中的另一个try catch块中声明一个try catch块吗?,包括了我们可以在Java中的另一个try catch块中声明一个try catch块吗?的使用技巧和注意事项,需要的朋友参考一下 是的,我们可以 在另一个try-catch块中声明一个try-catch块,这称为嵌套try-catch块。 嵌套的尝试捕获块 如果一个内部的try statemen牛逼没