对公共代码使用方法。
try {
// do something...
}
catch (ExceptionA e) {
// actions for ExceptionA
doCommon(parameters);
}
catch (ExceptionB e) {
// actions for ExceptionA
doCommon(parameters);
}
.....
void doCommon( parameters ) {
// actions for ExceptionA & ExceptionB
}
这将适用于大多数事情。
虽然有一些例外,如.为此,您可以返回,无论调用方是否必须返回,并将其用作:return
doCommon
catch (ExceptionA e) {
// actions for ExceptionA
if ( doCommon(parameters) )
return;
}
catch (ExceptionB e) {
// actions for ExceptionA
if ( doCommon(parameters) )
return;
}
“本机 Java”解决方案不存在。JLS指定(强调我的):
14.20.1. 执行 try-catch
没有 finally 块的 try 语句通过首先执行 try 块来执行。然后有一个选择:
如果 try 块的执行正常完成,则不会执行进一步的操作,try 语句将正常完成。
如果由于抛出值 V 而突然完成 try 块的执行,则有一个选择:
如果 V 的运行时类型赋值与 try 语句的任何 catch 子句的可捕获异常类 (§5.2) 兼容,则选择第一个(最左侧)此类 catch 子句。值 V 被分配给所选 catch 子句的参数,并执行该 catch 子句的 Block,然后有一个选择:
如果该块正常完成,则 try 语句正常完成。
如果该块由于任何原因突然完成,则 try 语句会出于同样的原因突然完成。
如果运行时类型 V 的赋值与 try 语句的任何 catch 子句的可捕获异常类不兼容,则 try 语句会由于值 V 的抛出而突然完成。
因此,只执行应用的第一个 catch 块。无法为同一 try 语句执行两个 catch 块。