Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何捕获try with resource语句中close方法引发的异常_Java_Exception_Try Catch - Fatal编程技术网

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

Java 如何捕获try with resource语句中close方法引发的异常,java,exception,try-catch,Java,Exception,Try Catch,我在读Java中的trytwithresource语句,它可以用来指定任意数量的资源 try (Resource1 res1 = initialize_code; Resource1 res2 = initialize_code; ...) { statement; } 现在,当try块退出(正常或异常抛出异常)时,将调用所有资源对象的close方法。但是一些close方法可以抛出异常。如果close本身抛出异常,在这种情况下会发生什么 但是一些接近的方法可以抛出异常 是的,他们可以

我在读Java中的
trytwithresource
语句,它可以用来指定任意数量的资源

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();
}