Javaのfinallyとは?例外が起きても必ず実行される処理

本記事は、Schooの「Java入門 初級【2026年版】」第9回「例外処理」を学ぶ前後に、finally の役割を整理したい方向けの記事です。
finally は、try-catch のあとに書く「最後に実行したい処理」の場所です。例外が起きたかどうかに関係なく、後処理を通したいときに使います。
まずは難しく考えず、「開いたものを閉じる」「使ったものを片付ける」「最後に必ず表示したい処理を書く」場所として押さえましょう。
Schoo コースページ:Java入門 初級【2026年版】
finallyは何のために使うのか
try-catch だけでも、例外が起きたときの対応は書けます。ただし、処理の途中で例外が起きると、本来最後に実行したかった片付け処理を通れないことがあります。
そこで使うのが finally です。finally に書いた処理は、try が正常に終わった場合でも、catch に移った場合でも、最後に実行されます。
finally は、正常に進んだ場合も、例外を catch した場合も、最後に実行される場所です。finallyの基本形
finally は、try-catch の後ろに続けて書きます。
try {
例外が起きるかもしれない処理
} catch (Exception e) {
例外が起きたときの処理
} finally {
最後に必ず実行したい処理
}
try には、例外が起きるかもしれない処理を書きます。catch には、例外が起きたときの対応を書きます。finally には、最後に実行したい後処理を書きます。
例外が起きない場合もfinallyは実行される
次のコードでは、10 / 2 は正常に計算できます。この場合、catch は実行されませんが、finally は実行されます。
try {
int result = 10 / 2;
System.out.println("結果:" + result);
} catch (ArithmeticException e) {
System.out.println("0で割ることはできません");
} finally {
System.out.println("計算処理を終了します");
}
表示の流れは、結果:5 のあとに 計算処理を終了します です。例外が起きなくても、最後の後処理として finally が通ります。
例外が起きた場合もfinallyは実行される
次のコードでは、10 / 0 で例外が発生します。この場合は catch に移りますが、そのあと finally も実行されます。
try {
int result = 10 / 0;
System.out.println("結果:" + result);
} catch (ArithmeticException e) {
System.out.println("0で割ることはできません");
} finally {
System.out.println("計算処理を終了します");
}
この場合、結果: の行は実行されません。代わりに catch の中でエラーメッセージを表示し、その後に finally の処理が実行されます。
finally の役割をイメージしやすくなります。finallyに書く処理の例
finally には、処理が成功しても失敗しても最後に行いたいことを書きます。
- ファイルを閉じる
- データベースや外部サービスとの接続を閉じる
- 処理終了のメッセージを表示する
- 一時的に使った状態を元に戻す
最近のJavaでは、ファイルや接続の後処理には try-with-resources という書き方もよく使われます。ただ、finally の考え方を理解しておくと、「例外が起きても後処理が必要になる」場面を読み取りやすくなります。
returnがあってもfinallyは通る
少し進んだ話ですが、try や catch の中に return がある場合でも、メソッドを抜ける前に finally が実行されます。
try {
return 100;
} finally {
System.out.println("最後に実行します");
}
この例では、100 を返して終わる前に、finally の中の表示処理が実行されます。最初のうちは、「メソッドを抜ける直前にも finally は通る」と覚えておけば十分です。
確認問題
finallyには、どのような処理を書きますか。tryの中で例外が起きなかった場合、finallyは実行されますか。catchの中で例外に対応したあと、finallyは実行されますか。
演習後の確認:こちらのページを使って、自分で考えた内容を見直せます。
あわせて読みたい関連記事
- Javaの例外処理とは?エラーでプログラムを止めないための考え方
- Javaのtry-catchとは?例外が起きたときの処理の流れを理解する
- Javaのreturnとは?メソッドの処理を終えて値を返す考え方
まとめ
finally は、例外が起きた場合も起きなかった場合も、最後に実行したい処理を書く場所です。ファイルを閉じる、接続を閉じる、処理終了のメッセージを出すなど、後処理をまとめるときに使います。try、catch、finally の流れを分けて考えると、例外処理の読み方が整理しやすくなります。