103 「例外修羅道」 Step08 解答例

MyAppException.java

// 独自の例外クラスを定義
public class MyAppException extends Exception {

    // コンストラクタでメッセージを受け取り、親クラスに渡す
    public MyAppException(String message) {
        super(message);
    }
}

ExceptionUtil.java

public class ExceptionUtil {

    public static void checkCode(int code) throws MyAppException {
        if (code == 999) {
            // 条件に合致した場合に独自例外をスロー
            throw new MyAppException("コード999は使用できません");
        }

        // 正常な場合はコードを出力
        System.out.println("コード: " + code);
    }
}

Main.java(再掲)

public class Main {
  public static void main(String[] args) {
    try {
      ExceptionUtil.checkCode(100);  // 正常
      ExceptionUtil.checkCode(999);  // 独自例外をスロー
    } catch (MyAppException e) {
      System.out.println("独自例外発生: " + e.getMessage());
    }
  }
}


解説:独自例外の定義と活用

このステップでは、業務固有の状況を表現するための例外クラスを自分で作る方法を学びます。


独自例外を作る理由

標準の IllegalArgumentExceptionNullPointerException では表現しきれないような
アプリケーション特有のエラー状態に名前と意味を与えるために、独自例外を定義します。

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

出力例

ExceptionUtil.checkCode(100);
// → コード: 100

ExceptionUtil.checkCode(999);
// → 独自例外発生: コード999は使用できません

補足:throws との併用

MyAppException はチェック例外(Exception のサブクラス)なので、
メソッドシグネチャに throws MyAppException をつける必要があります。


まとめ:このステップで学ぶべきこと

  • Exception を継承すれば、自分だけの例外クラスを定義できる
  • 業務ルールに合った例外を作ることで、コードの意図やエラーの意味が明確になる
  • チェック例外であれば、throws を忘れずに書く必要がある

103 ステップアップ問題 「例外修羅道」


Just Keep Typing, Baby!では、この「例外修羅道」でつまづいた人向けの解説をしています。こちらもぜひ!

// tesh:
// 「え、なんで?」ってなったやろ?それ、ここ。