Cha*_*cer 6 java try-with-resources
假设我在Java中有以下try-with-resources语句:
try (MyResource myResource1 = new MyResource(); MyResource myResource2 = new MyResource()) {
// do stuff...
}
Run Code Online (Sandbox Code Playgroud)
如果MyResource myResource2 = new MyResource()抛出异常,是否可以保证myResource1.close()将被调用?
Tun*_*aki 14
是的,这是有保证的.引自JLS第14.20.3节:
资源按从左到右的顺序初始化.如果资源无法初始化(即,其初始化程序表达式抛出异常),则会关闭try-with-resources语句到目前为止初始化的所有资源.如果所有资源都成功初始化,则try块将正常执行,然后关闭try-with-resources语句的所有非空资源.
在这种情况下,如果第二个new MyResource()抛出异常,则自myResource1成功初始化后,它将被关闭.