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なので当面は使えないが。