繁体   English   中英

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

[英]How to catch exception thrown by close method in try-with-resource statement

我正在阅读Java中的try-with-resource语句,它可用于指定任意数量的资源。

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

现在,当try块退出时(通常或异常抛出异常),将调用所有资源对象的close方法。 但是一些close方法会抛出异常。 如果close本身抛出异常会在该场景中发生什么?

但是一些接近的方法会抛出异常。

是的,他们可以,你是对的。 资源也按其初始化的相反顺序关闭。

如果close方法本身抛出异常会发生什么?

正如您所提到的,一些close方法也可以抛出异常。 如果在正常执行try块时发生这种情况,则会向调用者抛出异常。

但是,当另一个异常被抛出的东西,造成close资源的方法被调用,以及一个close方法抛出一个异常(重要性较低的例外实际上)?

在这种情况下,原始异常会被重新抛出,并且close方法引起的异常也会被捕获并作为被抑制异常附加。 这实际上是使用try-with-resource的优势之一,因为实现这样的机制将是繁琐的手工实现。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM