Exception finally块中抛出的异常是否添加到抑制的异常列表中?

Exception finally块中抛出的异常是否添加到抑制的异常列表中?,exception,java-7,Exception,Java 7,Java7添加了。如果在另一个异常已向堆栈上传播时发生异常,则将资源的close()方法引发的异常添加到抑制异常列表中 在try语句的finally块中抛出的异常是否也会发生同样的情况,如下面的示例中所示 try { throw new RuntimeException("Exception in try block."); } finally { throw new RuntimeException("Exception in finally block."); } 不。抑制

Java7添加了。如果在另一个异常已向堆栈上传播时发生异常,则将资源的
close()
方法引发的异常添加到抑制异常列表中

在try语句的finally块中抛出的异常是否也会发生同样的情况,如下面的示例中所示

try {
    throw new RuntimeException("Exception in try block.");
} finally {
    throw new RuntimeException("Exception in finally block.");
}

不。抑制异常的想法是,它们发生在资源try中的隐式finally中。如果您实际编写了自己的finally块,则抛出的异常不会被视为抑制异常。请注意,如果您同时拥有try with resources和自己的finally块,try with resources close()异常仍将被抑制,并且您自己的finally块将被视为常规异常


为了记住这一点,Java努力实现向后兼容性。这意味着“最终块”中的异常与它们通常的工作方式相同。只有try with resources的隐式finally会生成新的抑制异常。

我假设此功能可以以向后兼容的方式使用,例如,通过将
try
块中抛出的异常作为抑制异常添加到
finally
块中抛出的异常。这样,捕获异常的代码仍然会看到完全相同的异常和堆栈跟踪,除非它使用新添加的
Throwable.getsupprested()
方法。如何修改finally块以将异常作为抑制的异常(重新)抛出?我是否可以检测是否存在异常并获取其实例?