Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職

finally句

例外の有無に関わらず、処理を実行する – finally句
try {
tstatements
} catch(exclazz ex) {
cstatements
} finally {
fstatements
}
tstatements:例外が発生する可能性がある処理
exclazz:例外クラス
ex:例外クラスを表す変数名
cstatements:例外が発生した時に実行される処理
fstatements:例外の有無に関わらず実行される処理

例外が発生したかどうかに関わらず、実行したい処理はfinallyブロックに記述します。
たとえば、以下はfinally句でファイル(FileReaderオブジェクト)を閉じる例です。tryブロックにcloseメソッドを記述してしまうと、途中で例外が発生した場合、closeメソッドが実行されないまま、catchブロックに処理が移ってしまう可能性があります。finallyメソッドにcloseメソッドを記述することで、ファイルの閉じ漏れを防ぐことができます。

Animal.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();
      }
    }
  }
}
note

try-with-resources構文
Java SE 7では、try-with-resources構文が新たに追加されました。これによって、finally句を利用するよりもシンプルなコードでリソースを解放できます。詳しくは「ストリーム」節を参照してください。

例外処理
例外処理
try…catch命令
finally句
throw命令

Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職