カテゴリ: Java 更新日: 2026/07/07

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種類あり、それぞれ性質が異なります。初心者の方にとっては少し抽象的に感じるかもしれませんが、ここでは身近なイメージと簡単なサンプルを使って分かりやすく紹介していきます。

  • チェック例外
    コンパイル時に「この処理は失敗する可能性があるよ」とJavaが事前に警告してくれる例外です。例えば、存在するか分からないファイルを開こうとしたときなどが典型です。必ず例外処理を書く必要があるため、外部リソースを扱う場面ではよく登場します。
  • 実行時例外
    プログラムを実行してみないと発生するか分からない例外です。配列の範囲外アクセスやnullの値を触ってしまうときなど、「書いたコードのミス」が原因で起こることがほとんどです。

たとえば、次のようなとても簡単なサンプルを見るとイメージがつかみやすいでしょう。


public class ExceptionTypeSample {
    public static void main(String[] args) {
        String text = null;

        try {
            System.out.println(text.length()); // 実行時例外の代表例:NullPointerException
        } catch (NullPointerException e) {
            System.out.println("値が入っていない変数を使おうとしました。");
        }

        System.out.println("プログラムは止まらずに続きます。");
    }
}

この例では、textに何も入っていない状態でlength()を呼び出そうとしたため、実行時例外のひとつであるNullPointerExceptionが発生します。こうした例外はプログラミングの書き方次第で防げることが多く、例外処理を学ぶ上でもとても重要なポイントになります。

一方、チェック例外は「外部要因で失敗する可能性がある処理」を安全に実行するために用意されています。Javaが事前に気づいて教えてくれるため、初心者がつまずきやすい場面でも安心してプログラムを書くことができます。

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

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

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

プログラムを書いていると、「どのエラーが起きるか分からない」という場面は意外と多いものです。そんなときに役立つのが、catchを複数並べて、それぞれのエラーに応じた処理を行う方法です。種類ごとに分けて処理できるため、初心者でもエラーの原因を理解しやすくなります。

まずはイメージしやすいように、配列の範囲外アクセスと、0で割ってしまうケースの2つのミスをわざと含めたサンプルを見てみましょう。


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("配列の範囲外を読み込もうとしました。");
        } catch (ArithmeticException e) {
            System.out.println("0で割ろうとしたため計算できませんでした。");
        }

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

この例では、numbers[5]という存在しない場所を読み込もうとするため、最初に「配列の範囲外アクセス」という例外が発生します。そのタイミングでtryブロック内の処理は止まり、続いて対応するcatchが選ばれます。今回の場合は、ArrayIndexOutOfBoundsExceptionに一致するため、そのcatchだけが実行されます。

また、もし最初の処理でエラーが起きなかった場合は、次に10 / 0の計算で算術エラーが発生し、別のcatchが動くことになります。このように複数のcatchを並べることで、どの種類のエラーが起きても落ち着いて処理できるわけです。

はじめのうちは「似たようなエラーがいくつも出てきて混乱する」ことがあるかもしれませんが、例外の種類を分けて整理しながら処理を書けるようになると、プログラムの見通しがぐっと良くなります。複数の例外を捕まえる書き方は、Javaのエラーハンドリングを理解する上でも重要なステップです。

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
JSP
JSPで文字を出力する方法まとめ!HTMLとの違いと<%= %>の使い方
更新記事
New2
Servlet
JavaのHttpServletRequestクラスとgetHeaderメソッドを初心者向けに徹底解説!
更新記事
New3
Thymeleaf
Thymeleafのth:inlineを完全ガイド!初心者でもわかるインライン式の使い方
更新記事
New4
Spring
Javaの@RequestParamアノテーションの使い方を徹底解説!初心者でもわかるリクエストパラメータの基本と応用
更新記事
人気記事
No.1
Java&Spring記事人気No1
Java
JavaのDateTimeFormatterの使い方を完全ガイド!初心者でもわかる日付フォーマットの基本
No.2
Java&Spring記事人気No2
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.3
Java&Spring記事人気No3
Java
Javaのクラスとインスタンス化、コンストラクタの使い方完全ガイド!初心者でもわかるオブジェクト指向の基礎
No.4
Java&Spring記事人気No4
Spring
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.5
Java&Spring記事人気No5
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.6
Java&Spring記事人気No6
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.7
Java&Spring記事人気No7
Thymeleaf
Thymeleafのth:checkedの使い方!チェックボックスON/OFFを動的に制御する方法
No.8
Java&Spring記事人気No8
Spring
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門