カテゴリ: Java 更新日: 2025/11/24

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

例外処理
例外処理

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

生徒

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

先生

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

生徒

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

先生

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

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 - tryブロックでエラーが発生した場合、そのエラーを捕まえて処理します。
  • finally - エラーの有無に関係なく、必ず実行されるコードを記述します(オプション)。

public class ExceptionExample {
    public static void main(String[] args) {
        try {
            int result = 10 / 0; // ここでエラーが発生
            System.out.println("計算結果: " + result);
        } catch (ArithmeticException e) {
            System.out.println("エラーが発生しました: " + e.getMessage());
        } finally {
            System.out.println("処理が終了しました。");
        }
    }
}

上記のコードでは、10 / 0の演算がエラー(ArithmeticException)を引き起こしますが、プログラムはエラーをcatchで捕まえて処理を続けます。finallyブロックは常に実行されます。

3. 例外の種類

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

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

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

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

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、チェック例外/実行時例外、リソース管理、ベストプラクティス。

下記をクリックすると、解答が表示されます
カテゴリの一覧へ
新着記事
JavaのHttpServletResponseWrapperを完全解説!初心者でも理解できるレスポンス処理のしくみ
JavaのScannerクラスの使い方を徹底解説!初心者でも簡単に学べる入力処理
JavaのArrayListクラスとaddメソッドを完全解説!初心者でもわかるリスト操作
Javaの@Idアノテーションを徹底解説!初心者でもわかるデータベースとの連携方法
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Javaのラムダ式で配列を扱う!Arrays.streamの基本と注意点を初心者向けに解説
No.3
Java&Spring記事人気No3
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.4
Java&Spring記事人気No4
JavaのBigDecimalクラスcompareToメソッド完全ガイド!初心者でもわかる大小比較の基本
No.5
Java&Spring記事人気No5
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.6
Java&Spring記事人気No6
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.7
Java&Spring記事人気No7
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法
No.8
Java&Spring記事人気No8
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介