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

时间:2013-10-25 07:11:59

标签: exception java-7

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.");
}

1 个答案:

答案 0 :(得分:5)

没有。抑制异常的想法是它们最终在使用资源的尝试中发生。如果您实际编写了自己的finally块,则抛出的异常不会被视为抑制异常。请注意,如果您同时尝试使用资源和您自己的finally块,则仍会抑制具有资源close()异常的尝试,并且您自己的finally块将被视为常规异常。

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