Java 如何捕获try with resource语句中close方法引发的异常
我在读Java中的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本身抛出异常,在这种情况下会发生什么 但是一些接近的方法可以抛出异常 是的,他们可以
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();
}