MENU

【Java Silver 試験】例外処理の基本的な理解と例外スローの実装

今回は例外処理に関連した問題を解きましょう。

問題

次のプログラムを実行した場合に出力される内容はどれですか?正しい選択肢を選んでください。

public class ExceptionTest {
    public static void main(String[] args) {
        try {
            riskyMethod();
        } catch (IllegalArgumentException e) {
            System.out.println("Caught IllegalArgumentException");
        } catch (Exception e) {
            System.out.println("Caught General Exception");
        }
    }

    public static void riskyMethod() throws Exception {
        throw new IllegalArgumentException("Invalid Argument!");
    }
}

        

選択肢

  • A. Caught IllegalArgumentException
  • B. Caught General Exception
  • C. 無限ループに陥る
  • D. 実行時エラーになり、出力はされない

答えと解説

回答を見る

答え

A. Caught IllegalArgumentException

解説

基本説明:

Javaの例外処理は、コードがエラーを起こしたときにプログラムが安全に終了できるように使用します。例外は通常、発生したエラーを表す特別なオブジェクトです。

このコードでは、メソッドriskyMethodIllegalArgumentExceptionをスローします。mainメソッドでは、この例外をキャッチするためのtry-catchブロックがあります。

誤答理由:

選択肢Bの「Caught General Exception」は、IllegalArgumentExceptionExceptionを継承しているため、キャッチできる可能性があります。ただし、IllegalArgumentExceptionにマッチする最初のcatchブロックで処理されるため、選択肢Aが適切です。

無限ループや実行時エラーになる要素はコード内にはなく、例外が適切に処理されています。

つまずきポイント:

初心者が誤解しやすいのは、catchブロックの優先順位です。例外はスローされた後、その例外型に一致するcatchブロックに到達すると、そのブロックで処理されます。

例外をスローするメソッドが明示的にthrowsキーワードで指定されている場合、それが実際にどのcatchで捕まるかを確認するのが重要です。

発展知識:

Javaでは、例外クラスはThrowableを基底クラスとする階層を持ちます。Exceptionクラスとそのサブクラスは、チェック例外と呼ばれます。

チェック例外はコンパイル時に処理が求められるもので、RuntimeExceptionとそのサブクラスは非チェック例外(実行時例外)として扱われ、プログラムが実行されるまで処理は求められません。

例外設計を理解することで、適切なエラーハンドリングを書くことができます。

目次