技術メモのかけら

内容はもとより調べたことすら忘れてしまうので個人的なメモです。とにかく短く、結論だけ書いていきます。

try-with-resources

Java7から追加されたtry-with-resourcesを試してみる。


java.lang.AutoCloseableを実装したクラスなら何でも良いのだが、
close()が呼ばれたことを分かりやすくするため自作クラスを作成する。

public class AutoCloseableStub implements AutoCloseable {
    @Override
    public void close() {
        System.out.println("確かにクローズされてますね。");
    }
}

今度は呼び出し元クラスを作成する。
try直後の括弧内で生成したリソースを自動的にclose()してくれるってことなのでテスト。

try (AutoCloseableStub stub = new AutoCloseableStub()) {
    System.out.println("処理開始");
    throw new Exception("例外発生!!");
} catch (Exception e) {
    System.out.println("例外をキャッチ");
}
System.out.println("処理終了");
}


わざと例外を発生させてみたけどちゃんとクローズされている。
catchの中の処理より先にclose()が呼ばれるみたい。

処理開始
確かにクローズされてますね。
例外をキャッチ
処理終了

すっごい便利。今の仕事はJava6なので当面は使えないが。