カテゴリ: Javaの例外処理 更新日: 2026/05/05

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で適切に処理することで、プログラムの流れを制御できます。

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

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

※ Amazon広告リンク

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のカスタム例外(独自例外クラス)とは具体的にどのようなものですか?初心者にもわかりやすく教えてください。

Javaのカスタム例外とは、プログラミング言語Javaが標準で提供している例外クラス(IOExceptionやNullPointerExceptionなど)以外に、開発者が自分自身のアプリケーションの仕様に合わせて新しく定義する例外クラスのことです。「独自例外クラス」とも呼ばれます。Javaの例外処理の仕組みを利用しながら、自分のプログラム固有のエラー(例えば、会員登録での年齢制限エラーや在庫不足エラーなど)を表現するために作成します。基本的には、既存のExceptionクラスやRuntimeExceptionクラスを継承して、新しい名前のクラスを作ることで実現します。これにより、標準の例外だけでは区別しにくい「ビジネスルール違反」を明確にプログラム上で扱うことができるようになります。
Javaの例外処理の一覧へ
新着記事
Java
Java の古い日付クラス(Date, Calendar)と新しい日付 API の違い
JavaのDateとCalendarと新しい日付APIの違いとは?初心者向け完全ガイド
Java
Java のカレンダー機能(java.util.Calendar)の使い方
JavaのCalendarクラスの使い方をわかりやすく解説!日付や時刻の操作に便利な基本機能まとめ
Flutter
Dartのパッケージ管理(pubspec.yaml)の使い方
FlutterとDartのパッケージ管理完全ガイド!pubspec.yamlの使い方を初心者向けに徹底解説
Java
Java のミリ秒(Unix タイムスタンプ)を取得・変換する方法
JavaでUnixタイムスタンプ(ミリ秒)を取得・変換する方法を徹底解説!
人気記事
Java
Java の Random クラスを使ってランダムな数値を生成する方法
JavaのRandomクラスの使い方を完全ガイド!初心者でもわかる乱数生成
Java
Java の getter メソッドと setter メソッドの使い方
Javaのgetterメソッドとsetterメソッドの使い方を完全ガイド!初心者でもわかるアクセス方法
AWS
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
AWS
【AWS】VPCとは?初心者向けに仕組み・用途・できることをわかりやすく解説
【AWS】VPCとは?初心者向けに仕組み・用途・できることをわかりやすく解説

🔌 USBポート不足を解消

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

UGREEN USB-Cハブを見る

※ Amazon広告リンク