try-with-resources句はリソースのクローズ処理を自動で行う構文です。
try-with-resourcesについて
try-with-resources句はJava7で導入された構文です。
try-with-resourcesを使用することでリソースを自動的に開放・クローズしてくれるため、ソースコードを簡潔に書くことができます。
また、リソースのクローズ忘れによるバグの発生を防げます。
try-with-resourcesで自動クローズさせたいリソースは、AutoCloseableインターフェースを実装しているクラスである必要があります。
try-with-resources構文
以下、try-with-resourcesの基本的な構文です。
try (リソースの宣言) {
// リソースを使用した処理
} catch (例外クラス1 変数名1) {
// 例外1の処理
} finally {
// 必要に応じてfinallyブロックで追加の処理を行う
}
ブロック | 解説 |
---|---|
try | リソースを使用する処理を記述します。例外が発生した場合は処理が中断され、対応するcatchブロックが実行されます。 カッコ内には自動クローズしたいリソースを指定します。 (AutoCloseableインターフェースを実装している必要あり) |
catch | tryブロックで発生した例外をキャッチし処理を行います。複数のcatchブロックを使用して例外毎の処理を記述することもできます。 リソースの自動クローズ時に例外が発生した場合もここのcatch句で処理されます。 |
finally | 例外の発生有無に関わらず必ず実行したい処理を記述します。 try-catch-finally句ではリソースのクローズ処理をここに記載しますが、 try-with-resource句では自動的にクローズしてくれるので記述不要です。 |
try-with-resourcesサンプル
- (try-with-resourcesでリソースにBufferedReaderを指定する例)
-
try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { // IOExceptionの例外処理 }
上記例ではBufferedReaderオブジェクトは処理終了後に自動的にクローズされます。
もしリソースの解放時に例外が発生した場合はcatchブロックで処理されます。
try-with-resourcesまとめ
- Java7で導入された構文
- リソースを自動的にクローズしてくれる仕組みである
- クローズ処理に対する例外処理を記述しなくてよいため、コードがシンプルになる
- 指定できるリソースはAutoCloseableインターフェースを実装している必要がある
- リソースのクローズ時に例外が発生した場合は、catch句で処理される
コメント