关于java-7功能“精确重新抛出”和final Exception ex
的问题很多,我无法为我的问题找到明确的答案。
“精确投掷”和final Exception
有什么关系?
public static void main(String args[]) throws OpenException, CloseException {
boolean flag = true;
try {
if (flag){
throw new OpenException();
}
else {
throw new CloseException();
}
}
catch (final Exception e) {
System.out.println(e.getMessage());
throw e;
}
}
如果我想使用“精确投掷”,是否必须使用
final
关键字?catch (final Exception e) {
System.out.println(e.getMessage());
throw e;
}
如果不是强制性的,我可以将
ex
引用重新分配给新的例外吗?catch (Exception e) {
System.out.println(e.getMessage());
e=new AnotherException();
throw e;
}
最佳答案
不需要将异常参数(在示例中为e
)声明为final
即可获得精确的重新抛出语义。如果参数实际上是最终的,您还可以获得精确的重新抛出。
在第二个示例中,该参数不是有效的final,因此您不会获得精确的重新抛出语义。
(即使您分配给e
的异常与try
块中引发的原始异常兼容,这也适用。)
参考:JLS 11.2.2。
关于java - “精确重新抛出”与最终异常之间的关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44547388/