カテゴリ: Java 更新日: 2026/01/22

Javaの例外処理を完全ガイド!初心者でもわかるエラーハンドリングの基本

例外処理
例外処理

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

生徒

「Javaでプログラムが途中で止まってしまうことがあるんですけど、どうにか防げないですか?」

先生

「それはいい質問ですね。プログラムがエラーで止まってしまうのを防ぐためには、例外処理という方法があります。Javaでは、try-catch文を使って、エラーが発生した時の対処方法を決めることができるんです。」

生徒

「例外処理って具体的にはどうやってやるんですか?」

先生

「それでは、基本的な例外処理の使い方を見ていきましょう。」

1. 例外処理とは?

「1. 例外処理とは?」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

1. 例外処理とは?
1. 例外処理とは?

Javaの例外処理とは、プログラムの実行中に思わぬエラーが起きたとき、そのまま停止させずに「どう対処するか」を決められる仕組みのことです。例えば、存在しないファイルを開こうとしたり、数値を0で割ったりすると、そのままではプログラムが強制終了してしまいます。

例外処理を使えば、エラーが起きても「代わりのメッセージを表示する」「別の動作に切り替える」など、安全に処理を続けることができます。初心者の方にとっては“プログラムが途中で止まらないようにする保険”のようなものだとイメージすると理解しやすいでしょう。

簡単な例として、「数字を0で割ったとき」を例外処理で防ぐサンプルを見てみましょう。


public class SimpleExceptionSample {
    public static void main(String[] args) {
        int a = 10;
        int b = 0; // 0 で割ろうとすると本来はエラーになる

        try {
            int result = a / b;
            System.out.println("結果: " + result);
        } catch (ArithmeticException e) {
            System.out.println("計算できませんでした。0で割ることはできません。");
        }

        System.out.println("プログラムは止まらず最後まで実行されます。");
    }
}

このように、例外処理を使うことで「エラーで止まるはずの場面」でも安全に処理を続けられるようになります。プログラムの信頼性を高めるための大切な基本技術として、ぜひ身につけておきましょう。

2. 基本的な例外処理の書き方

2. 基本的な例外処理の書き方
2. 基本的な例外処理の書き方

Javaの例外処理は、trycatchfinallyという3つのキーワードを組み合わせて書きます。パッと見は少し難しそうに感じるかもしれませんが、「どこで失敗するか分からない処理」をtryで囲み、「失敗したときの対処」をcatchに書き、「最後に必ずやっておきたい後片付け」をfinallyに書く、というイメージを持つと理解しやすくなります。

  • try … エラーが発生するかもしれないコードを囲みます。「ここは危ないかもしれない」と思う部分をまとめて入れておきます。
  • catchtryの中で実際にエラーが起きたときに呼ばれます。どんな種類のエラーを捕まえるか(例外クラス)を指定し、そのときに行う処理を書きます。
  • finally … エラーが起きても起きなくても、最後に必ず実行したい処理を書きます。ファイルを閉じたり、メッセージを表示したりするときに便利です(省略も可能です)。

まずは、0で割り算してしまうケースを題材に、基本的な書き方を確認してみましょう。


public class ExceptionExample {
    public static void main(String[] args) {
        System.out.println("割り算を開始します。");

        try {
            int x = 10;
            int y = 0; // わざと 0 を指定
            int result = x / y; // ここでエラーが発生する
            System.out.println("計算結果: " + result); // ここは実行されない
        } catch (ArithmeticException e) {
            // 0 で割ったときのエラーをキャッチ
            System.out.println("エラーが発生しました: 0で割ることはできません。");
        } finally {
            // 必ず実行される部分
            System.out.println("計算処理を終了します。");
        }

        System.out.println("mainメソッドの最後まで到達しました。");
    }
}

このプログラムの流れを少し丁寧に追ってみましょう。まずtryブロックの中で10 / 0が実行されると、Javaは「これは数学的におかしい」と判断してArithmeticExceptionという例外を投げます。その瞬間、それ以降のtry内部の処理(System.out.println("計算結果: ..."))はスキップされ、代わりにcatch (ArithmeticException e)の中身が実行されます。

catchブロックでは、ユーザーに分かりやすいメッセージを表示することで、ただプログラムが落ちてしまうのではなく、「何が起きたのか」を伝えられます。さらに、その後にあるfinallyブロックは、エラーの有無に関係なく必ず実行されるため、「処理を終了します」といった後始末のメッセージを出す場所として使うことができます。こうしたtry-catch-finallyの基本形を覚えておくと、ファイル操作やネットワーク通信など、さまざまな場面で安全なエラーハンドリングを書けるようになります。

3. 例外の種類

3. 例外の種類
3. 例外の種類

Javaの例外には、いくつかの種類があります。主に以下の2つです:

  • チェック例外 - コンパイル時にチェックされる例外で、ファイル操作やネットワーク通信など、外部のリソースにアクセスする際に発生しやすいです。
  • 実行時例外 - 実行時に発生する例外で、配列の範囲外アクセスや、null値へのアクセスなどが含まれます。

実行時例外はプログラムの不具合によるものであることが多く、適切な例外処理を行うことでプログラムの安定性が向上します。

4. 複数の例外を捕まえる

「4. 複数の例外を捕まえる」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

4. 複数の例外を捕まえる
4. 複数の例外を捕まえる

Javaでは、catchブロックを複数定義することで、さまざまな種類の例外を個別に処理することができます。


public class MultipleExceptionHandling {
    public static void main(String[] args) {
        try {
            int[] numbers = {1, 2, 3};
            System.out.println(numbers[5]); // 配列の範囲外アクセス
            int result = 10 / 0; // 0での除算
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("配列の範囲外アクセス: " + e.getMessage());
        } catch (ArithmeticException e) {
            System.out.println("算術エラー: " + e.getMessage());
        }
    }
}

このコードでは、配列の範囲外アクセスと0での除算の2つのエラーが発生する可能性があります。それぞれに対応するcatchブロックを用意して、エラーを適切に処理します。

5. 例外処理のベストプラクティス

5. 例外処理のベストプラクティス
5. 例外処理のベストプラクティス

例外処理を書くときに注意するべき点もいくつかあります。

  • 例外を詳細に伝えるメッセージを表示する - 例外が発生した原因が分かりやすくなるように、getMessage()で詳細なエラーメッセージを表示するようにしましょう。
  • 無理に例外をキャッチしない - 実行時例外など、無理にキャッチする必要がないものはそのままにして、プログラム全体のロジックを改善する方が良いことがあります。

6. まとめ

6. まとめ
6. まとめ

Javaの例外処理は、プログラムがエラーで停止するのを防ぎ、適切にエラーを処理するための重要な仕組みです。この記事では、例外処理の基本構文であるtry-catch-finallyの使い方、例外の種類、複数の例外の処理方法、さらには例外処理のベストプラクティスについて学びました。

また、チェック例外と実行時例外の違いを理解し、それぞれに応じた処理を適切に行うことで、プログラムの信頼性と安定性を向上させる方法を学びました。エラーメッセージの表示や複数のcatchブロックの使用など、例外処理を効率的に活用することが、プロフェッショナルなプログラムを作成する鍵となります。

以下は、例外処理の復習用サンプルコードです。簡単なエラー処理を実装する例として、ぜひ参考にしてください。


public class ExceptionHandlingSummary {
    public static void main(String[] args) {
        try {
            String[] fruits = {"Apple", "Banana", "Orange"};
            System.out.println("1番目の果物: " + fruits[0]);
            System.out.println("5番目の果物: " + fruits[5]); // 配列の範囲外アクセス
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("エラー: 配列の範囲外アクセスです。詳細: " + e.getMessage());
        } finally {
            System.out.println("例外処理が終了しました。");
        }
    }
}

このコードでは、範囲外アクセスのエラーをキャッチし、プログラムがクラッシュせずにメッセージを表示します。finallyブロックは、エラーがあっても必ず実行されます。

先生と生徒の振り返り会話

生徒

「例外処理を使えば、エラーでプログラムが止まらなくなるんですね!特にtry-catch構文が便利です。」

先生

「そうですね。tryでエラーが起きそうなコードを囲み、catchで具体的に対処する方法は、エラー処理の基本です。」

生徒

「配列の範囲外アクセスみたいなエラーにも対応できるのがすごいです。でも、どの例外をキャッチすればいいか迷ったらどうすればいいですか?」

先生

「いい質問ですね。最初はよく発生する例外(例えば、ArrayIndexOutOfBoundsExceptionNullPointerException)から対応を始めると良いでしょう。また、エラーメッセージを活用して原因を特定するのも大事です。」

生徒

「分かりました!次は複数の例外を処理する練習をしてみます!」

先生

「それは良いですね。例外処理を適切に活用することで、エラーにも強い安定したプログラムが作れるようになりますよ。」

この記事を読んだ人からの質問

「この記事を読んだ人からの質問」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Javaの例外処理とは何ですか?

Javaの例外処理は、プログラム実行中に発生するエラー(例外)を適切に処理して、プログラムの停止を防ぐ仕組みです。主にtry-catch-finally構文を使って実装します。

チェック例外と実行時例外の違いは何ですか?

チェック例外は、コンパイル時に検出され、ファイル操作やネットワーク通信などで発生します。一方、実行時例外はプログラムの実行中に発生し、配列の範囲外アクセスやnull値の操作などが該当します。

try-catch-finally構文の基本的な使い方を教えてください。

tryブロックでエラーが発生しそうなコードを囲み、catchブロックでエラーをキャッチして処理します。finallyブロックは、エラーが発生してもしなくても必ず実行されるコードを記述します。

Javaで複数の例外を処理するにはどうすれば良いですか?

複数のcatchブロックを使うことで、異なる種類の例外を個別に処理できます。また、Java 7以降では、複数の例外を1つのcatchブロックで処理することも可能です。

配列の範囲外アクセスエラーはどのように処理しますか?

配列の範囲外アクセスで発生するArrayIndexOutOfBoundsExceptioncatchブロックでキャッチし、適切なエラーメッセージを表示して処理を継続します。

Javaでよく発生する実行時例外には何がありますか?

よく発生する実行時例外には、NullPointerExceptionArrayIndexOutOfBoundsExceptionArithmeticExceptionなどがあります。

例外処理を書くときの注意点は何ですか?

無駄に例外をキャッチしすぎないこと、詳細なエラーメッセージを提供すること、必要に応じてエラーを再スローすることで、プログラムの信頼性を向上させます。

例外が発生してもプログラムを終了させずに続行させるにはどうすれば良いですか?

try-catch構文を使用して例外をキャッチし、適切にエラーメッセージを処理することで、プログラムの継続が可能です。

例外を発生させるコードを書きたい場合、どうすれば良いですか?

throwキーワードを使って明示的に例外を発生させることができます。例えば、条件に応じてIllegalArgumentExceptionをスローすることができます。

Javaで例外処理を使わないとどうなりますか?

例外処理を使わない場合、エラーが発生した時点でプログラムが強制終了し、ユーザーに不親切なエラーメッセージが表示される可能性があります。

理解度のクイズ問題

理解度のクイズ
この記事の理解度をクイズで確認しよう

空欄の★に当てはまる内容を答えてください。

問題1
Javaの例外処理では、エラーが起きるかもしれない処理をブロックで囲み、発生した例外をcatchで受けて対処します。 このとき例外が起こりうるコードを囲むキーワードは try です。 また、例外の有無にかかわらず必ず実行したい後片付け(リソース解放やログ出力など)には、終了時に必ず走るブロック finally を用います。 これにより、エラーハンドリング/ロバスト設計/リソース管理(Java、例外、try-catch、ベストプラクティス)の基本を押さえられます。
public class ExceptionDemo {
    public static void main(String[] args) {
        try {
            String text = null;
            // ここで実行時例外(NullPointerException)の可能性
            System.out.println(text.length());
        } catch (NullPointerException e) {
            System.out.println("エラー: " + e.getMessage());
        } finally {
            System.out.println("後処理: リソース開放やログ出力などを実施");
        }
    }
}
【ヒント】 ・「★1」は例外が起こるかもしれない処理を囲むキーワード。 ・「★2」は例外の有無に関係なく必ず実行されるブロック。 ・関連キーワード:Java 例外処理、try-catch、finally、チェック例外/実行時例外、リソース管理、ベストプラクティス。

下記をクリックすると、解答が表示されます
カテゴリの一覧へ
新着記事
New1
Java
JavaのStreamインターフェースのmapの使い方を完全ガイド!初心者でもわかるデータ変換
新規投稿
New2
Thymeleaf
Thymeleafのth:checkedの使い方!チェックボックスON/OFFを動的に制御する方法
更新記事
New3
Thymeleaf
Thymeleafのth:hrefの使い方を全解説。初心者でも完璧に理解できるガイド
更新記事
New4
Spring
SpringのJpaRepositoryとsaveAndFlushの使い方を完全ガイド!初心者でもわかるデータ操作
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Spring
Spring BootのMultipartFile入門:ファイルアップロード・ダウンロードの実装方法と制限設定
No.3
Java&Spring記事人気No3
Spring
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
No.4
Java&Spring記事人気No4
Spring
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.5
Java&Spring記事人気No5
Java
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.6
Java&Spring記事人気No6
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.7
Java&Spring記事人気No7
Thymeleaf
Thymeleaf(タイムリーフ)の使い方入門!初心者でもわかるth:textの基礎
No.8
Java&Spring記事人気No8
Thymeleaf
Thymeleafのth:checkedの使い方!チェックボックスON/OFFを動的に制御する方法