我正在读关于try-with-resource
Java 中的语句可用于指定任意数量的资源。
try (Resource1 res1 = initialize_code; Resource1 res2 = initialize_code; ...)
{
statement;
}
现在,当 try 块退出时(正常或异常抛出异常)close
调用所有资源对象的方法。但一些close
方法可以抛出异常。如果在这种情况下会发生什么close
本身抛出异常?
但某些 close 方法可能会引发异常。
是的,他们可以,你是对的。资源也按照与初始化相反的顺序关闭。
如果会发生什么close
方法本身抛出异常?
正如你提到的一些close
方法也可以抛出异常。如果在正常执行 try 块时发生这种情况,则会向调用者抛出异常。
但是,当抛出另一个异常时,导致close
要调用的资源的方法,以及其中之一close
方法抛出异常(实际上重要性较低的异常)?
在这种情况下,原始异常会被重新抛出,并且由以下原因引起的异常close
方法
也被捕获并附加为抑制异常 https://stackoverflow.com/questions/7849416/what-is-a-suppressed-exception。这实际上是使用 try-with-resource 的优点之一,因为手动实现这种机制会很乏味。
try {
///statements.
} catch (IOException e) {
Throwable[] supressedExceptions = ex.getSupressed();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)