如何捕获 try-with-resource 语句中 close 方法抛出的异常

2024-05-18

我正在读关于try-with-resourceJava 中的语句可用于指定任意数量的资源。

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(使用前将#替换为@)

如何捕获 try-with-resource 语句中 close 方法抛出的异常 的相关文章

随机推荐