编程语言
首页 > 编程语言> > java-如何捕获try-with-resource语句中close方法引发的异常

java-如何捕获try-with-resource语句中close方法引发的异常

作者:互联网

我正在阅读有关Java中try-with-resource语句的信息,该语句可用于指定任意数量的资源.

try (Resource1 res1 = initialize_code; Resource1 res2 = initialize_code; ...) 
{
    statement;
}

现在,当try块退出时(正常或异常引发异常),将调用所有资源对象的close方法.但是某些关闭方法可能会引发异常.如果close自身抛出异常,在这种情况下会发生什么?

解决方法:

But some close methods can throw exceptions.

是的,他们可以,你是对的.同样,资源以其初始化的相反顺序关闭.

What will happen if close method itself throws exception?

正如您提到的,某些close方法也可能引发异常.如果在正常执行try块时发生这种情况,则会将异常引发给调用方.

但是,当引发另一个异常而导致关闭时会发生什么
调用资源的方法,并且其中一个close方法引发异常(实际上重要性较低的异常)?

在这种情况下,原始异常将被重新抛出,并且由close方法引起的异常
也被捕获并附加为supressed exception.这实际上是使用try-with-resource的优势之一,因为实现这种机制手工完成很麻烦.

try {
 ///statements.
} catch (IOException e) { 
   Throwable[] supressedExceptions = ex.getSupressed();
}

标签:exception,try-catch,java
来源: https://codeday.me/bug/20191119/2038033.html