当前位置: 首页 > 工具软件 > Catch2 > 使用案例 >

java catch 多个异常_在Java中是否可能在同一个catch块中捕获两个异常?

巫马曜文
2023-12-01

Java 7和更高版本

语法是:

try {

// stuff

} catch (Exception1 | Exception2 ex) {

// Handle both exceptions

}

ex的静态类型是所列出的异常中最专门的通用超类型。有一个很好的功能,如果你在catch中重新抛出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

}

如果异常处理程序需要访问在尝试之前声明的局部变量,这会变得麻烦。如果处理程序方法需要重新抛出异常(并且它被检查),那么你遇到严重的签名问题。具体来说,handleException必须声明为抛出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的处理程序可能会静静地吃异常!

 类似资料: