Java失去了异常

use*_*745 3 java exception finally try-catch

假设我们有以下方法(非常简化的版本):

    void doSomething() {
      try {
        throw new Exception("A");
      } finally {
        throw new Exception("B");
      }
    }
Run Code Online (Sandbox Code Playgroud)

消息"B"的异常在调用方法中被捕获.基本上,有没有办法知道在try块中抛出了哪个异常,如果finally块也抛出一些异常?假设方法doSomething()无法修改.

rge*_*man 6

JLS第14.20.2节规定:

如果try块的执行由于抛出值V而突然完成,...

...

如果finally块由于原因S而突然完成,则try语句突然完成,原因是S(并且丢弃并抛弃了值V的抛出).

Java必须丢弃原始异常V("完全突然")并且整个try-finally块"突然"完成S(" finally Exception,"B").

无法检索原始try块异常"A",它对应V于JLS.