“精确重新抛出”与最终异常之间的关系

时间:2017-06-14 14:18:33

标签: java exception-handling java-7

有很多关于java-7功能“精确重新渲染”和always @(A or B or G or P) 的问题,我找不到我的问题的明确答案。

“精确重新抛出”与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

1 个答案:

答案 0 :(得分:2)

不需要将e中的异常参数(final)声明为e以获得精确的重新抛出语义。如果参数有效最终,您也可以获得精确的重新抛出。

在你的第二个例子中,参数不是最终的,所以你不能得到精确的重新抛出语义。

(如果您分配给try的异常与minify: false块中抛出的原始异常兼容,则甚至适用。

参考:JLS 11.2.2