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

Java 7添加了suppressed exceptions的概念.try-with-resource statement将资源的close()方法抛出的异常添加到被抑制异常列表中,如果它们在另一个异常已经在堆栈中向上传播时发生.

对于try语句的finally块中抛出的异常,会发生同样的情况吗,如下例所示?

try {
    throw new RuntimeException("Exception in try block.");
} finally {
    throw new RuntimeException("Exception in finally block.");
}
最佳答案
没有.抑制异常的想法是它们最终发生在隐含的资源尝试中.如果您实际编写了自己的finally块,则抛出的异常不会被视为抑制异常.请注意,如果您同时尝试使用资源和您自己的finally块,则仍会抑制具有资源close()异常的尝试,并且您自己的finally块将被视为常规异常.

作为记住这一点的一种方式,Java力求向后兼容.这意味着最终阻止您编码工作的例外情况与他们总是一样.只有使用资源尝试的隐式最终生成新的抑制异常.

转载注明原文:是否将finally块中抛出的异常添加到抑制异常列表中? - 代码日志