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 する
このステップでは、ArrayIndexOutOfBoundsException
や ArithmeticException
のような
複数種類の例外を、親クラスである 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()
を使えば、例外の内容を簡単に取得できる
Just Keep Typing, Baby!では、この「例外修羅道」でつまづいた人向けの解説をしています。こちらもぜひ!
// tesh:
// この違和感、ここで処理しないと残るよ。