returnステートメントをtry-with-resourcesブロック内に置くと、リソースが自動的に閉じられるのではないかと思います。
try(Connection conn = ...) {
return conn.createStatement().execute("...");
}
このようなものを書くと、接続は閉じられますか? Oracleのドキュメントでは、次のように述べられています。
Try-with-resourcesステートメントは、ステートメントの終わりに各リソースが確実に閉じられるようにします。
Returnステートメントのためにステートメントの最後に到達しない場合はどうなりますか?
Oracleのチュートリアル に基づいて、「[ステートメント]は、tryステートメントが正常に完了するか突然完了するかに関係なく閉じられます」。例外としてabruptly
を定義しています。
JLS 14.1 で定義されているように、try
の内部での戻りは、突然の完了の例です。
return
インターフェースを実装しているため、リソースは(AutoCloseable
ステートメントを使用しても)自動的に閉じられます。以下は「正常終了」を出力する例です:
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");
}
}