Exception raised during try-with-resources declaration

Let's say I have the following try-with-resources statement in Java:

try (MyResource myResource1 = new MyResource(); MyResource myResource2 = new MyResource()) {
    // do stuff...
}

If an MyResource myResource2 = new MyResource()exception is thrown, is it guaranteed to be called myResource1.close()?

+4
source share
2 answers

Yes, it is guaranteed. Quote from JLS Section 14.20.3 :

. ( ), , try-with-resources, . , try , try-with-resources .

, new MyResource() , myResource1 , .

+10

:

public static void main(String[] args) {
    try (Resource1 myResource1 = new Resource1(); Resource2 myResource2 = new Resource2()) {
        // do stuff...
    }
}


class Resource1 implements AutoCloseable {

    @Override
    public void close() {
        System.out.println("Closing Resource1...");
    }

}

class Resource2 implements AutoCloseable {

    public Resource2() {
        throw new RuntimeException("Bad resource!");
    }

    @Override
    public void close() {
        System.out.println("Closing Resource2...");
    }

}

:

1...

"main" java.lang.RuntimeException: !

, .

+1

All Articles