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

ExceptionUtil.java

public class ExceptionUtil {

    public static void safeProcess(int[] array, int index, int divisor) {
        try {
            // 配列から要素を取得
            int value = array[index];
            System.out.println("選ばれた値: " + value);

            // 割り算を実行
            int result = value / divisor;
            System.out.println("計算結果: " + result);

        } catch (Exception e) {
            // すべての例外をまとめて捕捉
            System.out.println("例外が発生しました: " + e.getMessage());
        }
    }
}

解説:Exception でまとめて catch する

このステップでは、ArrayIndexOutOfBoundsExceptionArithmeticException のような
複数種類の例外を、親クラスである Exception でまとめて捕捉する方法を学びます。


Exception は例外クラスの親

Javaの例外階層では、ほとんどの例外は Exception クラスを継承しています。

Exception
├── RuntimeException
│ ├── ArithmeticException
│ └── ArrayIndexOutOfBoundsException
└── IOException など

このため、catch (Exception e) と書けば、ほとんどの例外を一括で処理できます。


出力例(テストコードによる結果)

safeProcess(new int[]{10, 20, 30}, 1, 5);
// → 選ばれた値: 20
// → 計算結果: 4

safeProcess(new int[]{10, 20, 30}, 3, 2);
// → 例外が発生しました: Index 3 out of bounds for length 3

safeProcess(new int[]{10, 20, 30}, 0, 0);
// → 選ばれた値: 10
// → 例外が発生しました: / by zero

getMessage() で原因を知る

例外オブジェクトの getMessage() を使うと、何が起きたのかのメッセージを取得できます。
これはログ出力やユーザーへの通知に役立ちます。


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

  • Exception でcatchすれば、個別の例外をすべて一括で処理できる
  • 一括catchは便利だが、個別の対処ができないというデメリットもある
  • getMessage() を使えば、例外の内容を簡単に取得できる

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


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

// tesh:
// この違和感、ここで処理しないと残るよ。