ExceptionUtil.java
public class ExceptionUtil {
public static void process(int[] array, int index, int divisor) {
try {
// 配列から要素を取り出す
int value = array[index];
System.out.println("選ばれた値: " + value);
// 割り算を実行する
int result = value / divisor;
System.out.println("計算結果: " + result);
} catch (ArrayIndexOutOfBoundsException e) {
// 配列のインデックスが範囲外の場合
System.out.println("エラー: インデックスが範囲外です");
} catch (ArithmeticException e) {
// ゼロ除算が発生した場合
System.out.println("エラー: ゼロによる除算です");
}
}
}
解説:複数の例外に個別対応する
このステップでは、1つのメソッド内で複数の例外が発生しうる処理に対して、それぞれ別々の catch
ブロックで対応する方法を学びます。
なぜ catch を分ける必要があるのか?
異なる種類のエラーに対して、それぞれ異なる対処をしたい場合、catch
を個別に書くことで、エラー内容に応じた処理分岐が可能になります。
try {
// 複数の危険な処理
} catch (ExceptionTypeA e) {
// エラーAに対する処理
} catch (ExceptionTypeB e) {
// エラーBに対する処理
}
出力例(テストコードによる結果)
ExceptionUtil.process(new int[]{10, 20, 30}, 2, 10);
// → 選ばれた値: 30
// → 計算結果: 3
ExceptionUtil.process(new int[]{10, 20, 30}, 5, 2);
// → エラー: インデックスが範囲外です
ExceptionUtil.process(new int[]{10, 20, 30}, 1, 0);
// → 選ばれた値: 20
// → エラー: ゼロによる除算です
まとめ:このステップで学ぶべきこと
try
ブロックの中で複数の例外が発生する可能性がある処理をまとめて記述できるcatch
を分けることで、エラーごとに異なる対応ができる- 安全に処理を継続しながら、適切なエラーメッセージを出力できる構造を作るのがこのステップの目的
Just Keep Typing, Baby!では、この「例外修羅道」でつまづいた人向けの解説をしています。こちらもぜひ!
// tesh:
// 動いた=理解できた、とは限らない。こっちで整えよう。