カテゴリ: Javaの例外処理 更新日: 2025/10/18

Javaのfinallyブロックとは?初心者でもわかる必ず実行される処理の使い方

349
Java の finally ブロックとは?必ず実行される処理の使い方

先生と生徒の会話形式で理解しよう

生徒

「Javaのtry-catch文を勉強してたんですが、finallyってなんですか?」

先生

finallyブロックは、例外が起きても起きなくても必ず実行される処理を書く場所なんです。」

生徒

「必ず実行されるって、どんなときに使うんですか?」

先生

「ファイルやデータベースの接続を閉じるなど、後始末の処理を書くときにとても便利ですよ。それでは詳しく見ていきましょう。」

1. Javaのfinallyブロックとは?

1. Javaのfinallyブロックとは?
1. Javaのfinallyブロックとは?

Javaのfinallyブロックは、tryブロックとcatchブロックに続けて書かれる部分で、例外の発生に関係なく必ず実行される処理を記述します。たとえtry内でreturnが使われても、finallyの中の処理は実行されます。

Javaで例外処理を学ぶうえで、finallyは非常に重要なキーワードです。後片付けやリソースの解放など、必ず行いたい処理を安心して記述できるのが最大の利点です。

2. finallyブロックの基本的な書き方

2. finallyブロックの基本的な書き方
2. finallyブロックの基本的な書き方

Javaのfinallyブロックの基本構文は以下の通りです。catchを省略してtry-finallyとすることもできます。


public class FinallyBasicExample {
    public static void main(String[] args) {
        try {
            System.out.println("処理を開始します。");
        } finally {
            System.out.println("必ず実行される処理です。");
        }
    }
}

処理を開始します。
必ず実行される処理です。

このように、tryブロック内で例外が発生しなくても、finallyの中の処理は確実に実行されます。

3. 例外が発生した場合でもfinallyは実行される

3. 例外が発生した場合でもfinallyは実行される
3. 例外が発生した場合でもfinallyは実行される

例外が発生した場合でも、finallyブロックは必ず実行されます。次のコードを見てください。


public class FinallyWithException {
    public static void main(String[] args) {
        try {
            int result = 10 / 0;
            System.out.println("結果:" + result);
        } catch (ArithmeticException e) {
            System.out.println("0で割ることはできません。");
        } finally {
            System.out.println("後始末の処理を実行します。");
        }
    }
}

0で割ることはできません。
後始末の処理を実行します。

このように、catchブロックで例外を処理しても、finallyは必ず実行され、ログ出力やリソース解放の場面で活躍します。

Javaをこれから始める人や、 オブジェクト指向の考え方を基礎から理解したい人には、 定番の入門書がこちらです。

スッキリわかるJava入門 第4版をAmazonで見る

※ Amazonアソシエイト・プログラムを利用しています

4. tryブロックでreturnしてもfinallyは実行される

4. tryブロックでreturnしてもfinallyは実行される
4. tryブロックでreturnしてもfinallyは実行される

Javaでは、tryブロックの中でreturnを使っても、finallyブロックの処理は実行されます。これも初心者が混乱しやすいポイントです。


public class FinallyWithReturn {
    public static int testMethod() {
        try {
            System.out.println("tryブロックの中");
            return 1;
        } finally {
            System.out.println("finallyブロックの中");
        }
    }

    public static void main(String[] args) {
        int result = testMethod();
        System.out.println("戻り値: " + result);
    }
}

tryブロックの中
finallyブロックの中
戻り値: 1

このように、returnの後でも、finallyは必ず実行されるため、「どうしても実行したい処理」は安心してここに書くことができます。

5. finallyブロックの主な用途と活用シーン

5. finallyブロックの主な用途と活用シーン
5. finallyブロックの主な用途と活用シーン

finallyブロックは、以下のような場面で使われます。

  • ファイルやネットワークリソースのクローズ処理
  • データベース接続の切断
  • ロックの解放や一時ファイルの削除
  • エラーログの出力や記録

たとえばファイル読み書きの後にファイルを閉じる処理をfinallyで書くことで、例外が発生してもリソースを適切に解放できます。

6. try-with-resourcesとの違いと併用

6. try-with-resourcesとの違いと併用
6. try-with-resourcesとの違いと併用

Java 7以降では、try-with-resources構文を使うと、finallyブロックを使わずに自動的にリソースを閉じることができます。


import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class TryWithResourcesExample {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("sample.txt"))) {
            String line = br.readLine();
            System.out.println(line);
        } catch (IOException e) {
            System.out.println("ファイル読み込み中にエラーが発生しました。");
        }
    }
}

この構文は、AutoCloseableインターフェースを実装しているクラスに使えます。try-with-resourcesfinallyと同じくリソース解放に使えるため、より簡潔なコードが書けるメリットがあります。

7. finallyブロックで例外を再発生させるときの注意点

7. finallyブロックで例外を再発生させるときの注意点
7. finallyブロックで例外を再発生させるときの注意点

Javaでは、finallyブロック内で新たに例外をスローすると、元の例外が上書きされてしまうことがあります。これは初心者が見落としがちな落とし穴です。

例えば、tryで例外が発生したにも関わらず、finallyで別の例外がスローされると、最初の例外が消えてしまいます。

このような場合は、finallyで新たな例外を投げる前に、ログ出力やエラー情報の保持などを行い、デバッグ可能な形で残しておくことが推奨されます。

Javaの例外処理の一覧へ
新着記事
Java の Scanner クラスを使ってユーザーから入力を受け取る方法
JavaのScannerクラスの使い方を完全ガイド!初心者でもわかるユーザー入力の受け取り方法
Java の Collections クラスを使ってリストを操作する方法
JavaのCollectionsクラスの使い方を完全解説!リスト操作を初心者向けにやさしく理解しよう
Javaのメソッド定義と戻り値型
Javaのメソッド定義と戻り値型を完全解説!初心者でもわかる基本ルール
Javaのクラスとインスタンス
Javaのクラスとインスタンスを徹底解説!初心者にもわかるオブジェクト指向
人気記事
インスタンスタイプの料金比較と最適な選び方(最新2025年版)
AWSのインスタンスタイプの料金比較と最適な選び方【2025年最新版】
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazonアソシエイト・プログラムを利用しています