Try-with-resources and return statements in java
Based on Oracle's tutorial, "[the resource] will be closed regardless of whether the try statement completes normally or abruptly". It defines abruptly
as from an exception.
Returning inside the try
is an example of abrupt completion, as defined by JLS 14.1.
The resource will be closed automatically (even with a return
statement) since it implements the AutoCloseable
interface. Here is an example which outputs "closed successfully":
public class Main {
public static void main(String[] args) {
try (Foobar foobar = new Foobar()) {
return;
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Foobar implements AutoCloseable {
@Override
public void close() throws Exception {
System.out.println("closed successfully");
}
}