【Java】try-with-resources構文について - TASK NOTES
Java7 AutoCloseableを使ってスマートにリソース解放する - ほげにっき
import java.io.IOException; public class App { public static void main(String[] args) { try (JCLOSEFile jcloseFile = new JCLOSEFile()) { jcloseFile.getX(); } catch (IOException e) { e.printStackTrace(); } } public static class JCLOSEFile implements AutoCloseable { public void getX() throws IOException { System.out.println("throw exception from getX"); throw new IOException("my exception"); } @Override public void close() throws IOException { System.out.println("close Method is Called!"); throw new IOException("from close method"); } } }
% <Java> throw exception from getX close Method is Called! java.io.IOException: my exception at io.github.yuokada.App$JCLOSEFile.getX(App.java:19) at io.github.yuokada.App.main(App.java:9) Suppressed: java.io.IOException: from close method at io.github.yuokada.App$JCLOSEFile.close(App.java:25) at io.github.yuokada.App.main(App.java:10)
出力結果を確認するとgetX() から例外を投げられて呼び出されたclose()メソッドからも例外が投げられてます。
それをcatch節で捕まえてます。SuppressedExceptionsにはclose()から投げられた例外がセットされています。
簡単に全ての例外を捕まえられるのでAutoCloseableは使っていきたいですね。
やっぱり、実際に実装すると理解が深まりますね。
Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング
- 作者: Cay S. Horstmann
- 出版社/メーカー: インプレス
- 発売日: 2015/04/03
- メディア: Kindle版
- この商品を含むブログ (7件) を見る