finally句
例外の有無に関わらず、処理を実行する – finally句- try {
- tstatements
- } catch(exclazz ex) {
- cstatements
- } finally {
- fstatements
- }
- tstatements:例外が発生する可能性がある処理
- exclazz:例外クラス
- ex:例外クラスを表す変数名
- cstatements:例外が発生した時に実行される処理
- fstatements:例外の有無に関わらず実行される処理
例外が発生したかどうかに関わらず、実行したい処理はfinallyブロックに記述します。
たとえば、以下はfinally句でファイル(FileReaderオブジェクト)を閉じる例です。tryブロックにcloseメソッドを記述してしまうと、途中で例外が発生した場合、closeメソッドが実行されないまま、catchブロックに処理が移ってしまう可能性があります。finallyメソッドにcloseメソッドを記述することで、ファイルの閉じ漏れを防ぐことができます。
ExFinally.java
package com.example.mynavi.exception; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class ExFinally { public static void main(String[] args) { FileReader reader = null; try { reader = new FileReader("C:/data.txt"); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { if (reader != null) { reader.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
try-with-resources構文
Java SE 7では、try-with-resources構文が新たに追加されました。これによって、finally句を利用するよりもシンプルなコードでリソースを解放できます。詳しくは「ストリーム」節を参照してください。