カスタム例外の作成

Javaにおけるカスタム例外の作成とは、開発者が自分のアプリケーションに特化した例外クラスを定義し、標準の例外クラス(IOExceptionNullPointerException など)では表現しきれないエラー状況を明確に扱えるようにすることを指します。


1. カスタム例外を作成する目的

Javaの標準例外は多くのケースをカバーしていますが、ビジネスロジックに固有のエラー(例:会員登録時の年齢制限違反、ログイン試行回数の超過など)を扱うには不十分です。そうした場合に、アプリケーションの文脈に合った独自の例外クラスを定義すると、エラー処理の可読性と保守性が向上します。


2. カスタム例外の基本的な作成方法

手順

  • Exception または RuntimeException を継承するクラスを作成する。

例1:チェック例外(Exception を継承)

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

このように作成すると、呼び出し側では try-catch で処理するか、throws でスローを明示する必要があります。

例2:非チェック例外(RuntimeException を継承)

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

このようにすると、例外の捕捉を強制されず、発生時に実行時エラーとしてスローされます。


3. カスタム例外の使い方(呼び出し例)

java
public class MemberService { public void registerMember(int age) throws AgeRestrictionException { if (age < 18) { throw new AgeRestrictionException("18歳未満は登録できません。"); } // 登録処理続行 } }

呼び出し側:

java
public class Main { public static void main(String[] args) { MemberService service = new MemberService(); try { service.registerMember(16); } catch (AgeRestrictionException e) { System.out.println("登録失敗: " + e.getMessage()); } } }

4. カスタム例外作成時のベストプラクティス

  • 名前には Exception を付ける(例:UserNotFoundException

  • メッセージや原因(Throwable cause)をコンストラクタで指定可能にする

  • 継承元を意図に応じて使い分ける

    • Exceptionチェック例外として扱いたい場合

    • RuntimeException非チェック例外として扱いたい場合


5. よくある用途

  • バリデーションエラー

  • ビジネスルール違反

  • 外部サービスとの接続失敗のカスタム表現

  • 独自APIのエラー管理


まとめ

カスタム例外を使うことで、アプリケーションの意図を明確に伝える例外処理が可能になり、コードの保守性や可読性が大きく向上します。適切な命名と設計を心がけ、チェック例外と非チェック例外の使い分けにも注意を払うことが重要です。

生成日:2025/05/03