本文へスキップ
BecomeCoder

Javaオブジェクト指向コース · 第7章 例外・enum・record ― エラーと向き合い、データを簡潔に表す · レッスン26

例外とtry-catch ― エラーに備える

ブラウザで完結

導入

配列の範囲外にアクセスしたり、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で割ると発生する ArithmeticExceptioncatch し、0では割れません と表示してください。

ヒント1を見る

try { System.out.println(a / b); } catch (ArithmeticException e) { ... } という形にします。

ヒント2を見る

catch の中で System.out.println("0では割れません"); と書きます。

実際に動かしてみよう

下のエディタにJavaを書いて「実行」を押すと、学習用シミュレータが System.out.println の出力を表示します(本物のJVMではなく、教材の範囲を再現した軽量エンジンです)。クラス・継承・コレクションなども動きます。Scanner で入力を読む例は「標準入力」欄に値を入れてください。本文の例を書き換えて動かしてみましょう(Stream・ラムダ・スレッド・ファイル入出力など一部の機能は対象外です)。

Java — ブラウザ内で実行(学習用シミュレータ)

Javaの教材サブセットを動かす学習用シミュレータを読み込みます(本物のJVMではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。