導入
配列の範囲外にアクセスしたり、0で割り算をしたりすると、プログラムは実行時にエラー(例外)を起こしてそこで止まってしまいます。try-catch を使うと、そうしたエラーを「捕まえて」プログラムを止めずに続けられます。
説明
public class Main {
public static void main(String[] args) {
int[] nums = { 1, 2, 3 };
try {
System.out.println(nums[5]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("配列の範囲外です");
}
System.out.println("プログラムは続く");
}
}
flowchart TD
A["try ブロックを実行"] --> B{エラーが起きた?}
B -- はい --> C["catch ブロックを実行"]
B -- いいえ --> D["そのまま続行"]
C --> E["try-catchの後の処理へ"]
D --> E
try { ... }… エラーが起きるかもしれない処理を囲みます。catch (ArrayIndexOutOfBoundsException e) { ... }…tryの中で 指定した種類のエラー が発生したとき、ここが実行されます。nums[5]は存在しない要素(配列は0〜2番目までしかない)なので、ArrayIndexOutOfBoundsException(配列範囲外エラー)が発生します。- エラーが
catchで捕まえられると、プログラムはそこで止まらず、try-catchのあとの処理("プログラムは続く"の表示)へ進みます。
やってみよう
下のエディタで nums[5] を nums[1](範囲内)に変えて実行し、catch ブロックが実行されなくなることを確認しましょう。
演習
int a = 10;、int b = 0; を用意し、try の中で a / b を計算・表示してください。0で割ると発生する ArithmeticException を catch し、0では割れません と表示してください。
ヒント1を見る
try { System.out.println(a / b); } catch (ArithmeticException e) { ... } という形にします。
ヒント2を見る
catch の中で System.out.println("0では割れません"); と書きます。