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

Javaのカスタム例外を作成する方法を完全ガイド!初心者でもわかる独自例外クラスの作り方

353
Java のカスタム例外を作成する(独自の例外クラスの作成方法)

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

生徒

「Javaで自分だけの例外クラスを作るにはどうすればいいんですか?」

先生

「JavaではExceptionクラスを継承して、自分だけのカスタム例外を作ることができますよ。」

生徒

「どんなときにカスタム例外を使えばいいんですか?」

先生

「ビジネスロジックに特化したエラーや、独自のエラーメッセージを使いたいときに便利です。では、詳しく見ていきましょう!」

1. Javaでカスタム例外とは?

1. Javaでカスタム例外とは?
1. Javaでカスタム例外とは?

Javaの例外処理において、カスタム例外(独自例外クラス)は自分で定義した例外を表現するための仕組みです。標準で提供されているIOExceptionNullPointerExceptionなどでは表現しきれない、アプリケーション固有のエラーを扱いたいときに使います。

Javaのカスタム例外は、次のようにExceptionまたはRuntimeExceptionを継承して作成します。

2. カスタム例外を作成する基本の書き方

2. カスタム例外を作成する基本の書き方
2. カスタム例外を作成する基本の書き方

まずは、Javaでのカスタム例外の基本的な作成方法を見てみましょう。今回は「年齢が不正なときに発生する例外」を作ってみます。


public class InvalidAgeException extends Exception {
    public InvalidAgeException(String message) {
        super(message);
    }
}

このように、Exceptionを継承して、コンストラクタでエラーメッセージを親クラスに渡すだけでOKです。

3. カスタム例外の使い方を実践で学ぼう

3. カスタム例外の使い方を実践で学ぼう
3. カスタム例外の使い方を実践で学ぼう

次は、カスタム例外を実際に使う例を見ていきましょう。ユーザーの年齢をチェックして、未成年だった場合に例外を投げる処理を作ってみます。


public class UserValidator {
    public static void checkAge(int age) throws InvalidAgeException {
        if (age < 18) {
            throw new InvalidAgeException("18歳未満のユーザーは登録できません。");
        }
    }

    public static void main(String[] args) {
        try {
            checkAge(16);
        } catch (InvalidAgeException e) {
            System.out.println("エラー: " + e.getMessage());
        }
    }
}

エラー: 18歳未満のユーザーは登録できません。

このように、throw newで例外を発生させ、catchで適切に処理することで、プログラムの流れを制御できます。

4. カスタム例外はいつ使う?

4. カスタム例外はいつ使う?
4. カスタム例外はいつ使う?

Javaのカスタム例外は以下のような場面で非常に役立ちます。

  • ビジネスルールに特化したエラー(例:在庫切れ、ユーザー権限エラー)
  • 複数の箇所で同じ種類の例外を扱いたいとき
  • より読みやすく、メンテナンスしやすいコードを書くとき

例えばECサイトで「商品が見つからない」ときにProductNotFoundExceptionを使うと、コードが明確になります。

5. チェック例外と非チェック例外の違い

5. チェック例外と非チェック例外の違い
5. チェック例外と非チェック例外の違い

Javaの例外には「チェック例外(Exceptionの直接継承)」と「非チェック例外(RuntimeExceptionの継承)」があります。

違いは以下のとおりです:

  • チェック例外:呼び出し元でthrows宣言またはtry-catchが必須。
  • 非チェック例外:明示的な処理が不要。実行時に発生。

以下はRuntimeExceptionを継承した非チェック例外の例です。


public class CustomRuntimeException extends RuntimeException {
    public CustomRuntimeException(String message) {
        super(message);
    }
}

非チェック例外は、コードが簡潔になる反面、例外処理の見落としに注意が必要です。

6. 複数のカスタム例外を使い分けるテクニック

6. 複数のカスタム例外を使い分けるテクニック
6. 複数のカスタム例外を使い分けるテクニック

現実の開発では、複数の独自例外を使い分けることで、より明確なエラー処理が可能になります。

例えば以下のようなクラスを用意します:


public class UserNotFoundException extends Exception {
    public UserNotFoundException(String message) {
        super(message);
    }
}

public class PasswordMismatchException extends Exception {
    public PasswordMismatchException(String message) {
        super(message);
    }
}

これにより、ユーザー認証において「ユーザーが存在しない」のか「パスワードが間違っている」のかを明確に分けて処理できます。

7. カスタム例外に追加情報を持たせるには?

7. カスタム例外に追加情報を持たせるには?
7. カスタム例外に追加情報を持たせるには?

独自例外クラスには、エラーメッセージ以外の情報(例:エラーコード、原因となる値など)も追加できます。


public class ApiException extends Exception {
    private int errorCode;

    public ApiException(String message, int errorCode) {
        super(message);
        this.errorCode = errorCode;
    }

    public int getErrorCode() {
        return errorCode;
    }
}

このように、詳細なエラー管理が可能になるので、大規模なシステムやAPI連携では特に便利です。

Javaの例外処理の一覧へ
新着記事
FlutterのInheritedWidgetとは?仕組みと活用方法
FlutterのInheritedWidgetとは?仕組みと活用方法を初心者向けにやさしく解説
Blocパターンの仕組みと導入方法をわかりやすく解説
FlutterのBlocパターンを完全ガイド!初心者でもわかる状態管理と導入方法
Flutterのプロジェクト作成コマンドとディレクトリ構成を学ぼう
Flutterのプロジェクト作成コマンドとディレクトリ構成を学ぼう
Flutterのウィジェットとは?初心者向けに仕組みと使い方を解説
Flutterのウィジェットとは?初心者向けに仕組みと使い方を解説
人気記事
インスタンスタイプの料金比較と最適な選び方(最新2025年版)
AWSのインスタンスタイプの料金比較と最適な選び方【2025年最新版】
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
Java のインターフェースとは?普通のクラスとの違いを学ぼう
Javaのインターフェースとは?普通のクラスとの違いを学ぼう【初心者向け解説】
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説