小编典典
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可能最终会悄悄地吞噬异常!
2020-10-18
本文介绍了在Java 7及更高版本中如何使用多异常捕获语法来在同一catch块中处理Exception1和Exception2。在Java 6及更早版本中,可以通过多种笨拙的方法实现类似功能,如单独的catch块、通用异常处理方法或检查异常的实例检查。Java 7引入的新语法简化了这一过程,并允许更精确的异常处理。
4232

被折叠的 条评论
为什么被折叠?



