如何在try-with-resource语句中捕获close方法引发的异常
Posted
技术标签:
【中文标题】如何在try-with-resource语句中捕获close方法引发的异常【英文标题】:How to catch exception thrown by close method in try-with-resource statement 【发布时间】:2015-09-24 03:58:36 【问题描述】:我正在阅读 Java 中的 try-with-resource
语句,该语句可用于指定任意数量的资源。
try (Resource1 res1 = initialize_code; Resource1 res2 = initialize_code; ...)
statement;
现在,当 try 块退出(正常或异常抛出异常)时,将调用所有资源对象的 close
方法。但是一些close
方法可以抛出异常。如果close
本身抛出异常,这种情况会发生什么?
【问题讨论】:
【参考方案1】:但是一些close方法会抛出异常。
是的,他们可以,你是对的。此外,资源的关闭顺序与其初始化的相反。
如果
close
方法本身抛出异常会怎样?
正如你提到的,一些close
方法也可以抛出异常。如果在正常执行 try 块时发生这种情况,则将异常抛出给调用者。
但是当另一个异常被抛出,导致close
要调用的资源的方法,close
方法之一抛出异常(实际上是重要性较低的异常)?
在这种情况下,原始异常被重新抛出,由close
方法引起的异常
也被捕获并附加为supressed exception。这实际上是使用 try-with-resource 的优势之一,因为手动实现这种机制会很乏味。
try
///statements.
catch (IOException e)
Throwable[] supressedExceptions = ex.getSupressed();
【讨论】:
以上是关于如何在try-with-resource语句中捕获close方法引发的异常的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Java 中对接口对象使用 try-with-resources 语句
在 try-with-resources 中声明的变量的注释?