我正在阅读Java中的try-with-resource
语句,该语句可用于指定任意数量的资源。
try (Resource1 res1 = initialize_code; Resource1 res2 = initialize_code; ...)
{
statement;
}
现在,当try块退出时(通常或异常抛出异常),将调用所有资源对象的close
方法。但是一些close
方法可能会抛出异常。如果close
本身抛出异常会在该场景中发生什么?
答案 0 :(得分:3)
但是一些接近的方法可能会抛出异常。
是的,他们可以,你是对的。资源也按其初始化的相反顺序关闭。
如果
close
方法本身抛出异常,会发生什么?
正如您所提到的,一些close
方法也可以抛出异常。如果在正常执行try块时发生这种情况,则会向调用者抛出异常。
但是什么时候抛出了另一个异常,导致close
要调用的资源的方法,其中一个close
方法抛出一个异常(实际上重要性较低的例外)?
在这种情况下,原始异常会被重新抛出,并由close
方法引起异常
也被supressed exception捕获并附加。这实际上是使用try-with-resource的一个优势因为实现这样的机制将是繁琐的手工实现。
try {
///statements.
} catch (IOException e) {
Throwable[] supressedExceptions = ex.getSupressed();
}