我需要捕获两个异常,因为它们需要相同的处理逻辑。我想做类似的事情:
catch (Exception e, ExtendsRuntimeException re) {
// common logic to handle both exceptions
}
是否可以避免在每个catch块中重复处理程序代码?
从Java
7开始,支持多异常捕获。
语法为:
try {
// stuff
} catch (Exception1 | Exception2 ex) {
// Handle both exceptions
}
的静态类型ex
是列出的异常中最特殊的通用超类型。有一个很好的功能,如果您将其重新抛出ex
,编译器就会知道只能抛出列出的异常之一。
在Java 7之前,有多种方法可以解决此问题,但是它们往往比较笨拙并且有局限性。
try {
// stuff
} catch (Exception1 ex) {
handleException(ex);
} catch (Exception2 ex) {
handleException(ex);
}
public void handleException(SuperException ex) {
// handle exception here
}
如果异常处理程序需要访问在之前声明的局部变量,则这会变得很混乱try
。而且,如果处理程序方法需要重新引发异常(并进行了检查),则签名会遇到严重问题。具体来说,handleException
必须声明为throwing
SuperException
…这可能意味着您必须更改封闭方法的签名,依此类推。
try {
// stuff
} catch (SuperException ex) {
if (ex instanceof Exception1 || ex instanceof Exception2) {
// handle exception
} else {
throw ex;
}
}
同样,我们在签名方面存在潜在的问题。
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牛逼没