【问题标题】:How to catch exception thrown by close method in try-with-resource statement如何在try-with-resource语句中捕获close方法引发的异常
【发布时间】:2015-09-24 03:58:36
【问题描述】:

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

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

现在,当 try 块退出(正常或异常抛出异常)时,将调用所有资源对象的 close 方法。但是一些close 方法可以抛出异常。如果close 本身抛出异常,这种情况会发生什么?

【问题讨论】:

    标签: java exception try-catch


    【解决方案1】:

    但是一些close方法会抛出异常。

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

    如果close方法本身抛出异常会怎样?

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

    但是当另一个异常被抛出,导致close 要调用的资源的方法,close 方法之一抛出异常(实际上是重要性较低的异常)?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      相关资源
      最近更新 更多