MENU

【Java Silver 試験】例外処理の活用とスローの理解

例外処理を用いたメソッドの使い方について学んでいきましょう。

問題

次のコードを実行したときに出力される結果はどれですか?

class ExceptionDemo {
                static void riskyMethod() throws Exception {
                    throw new Exception("Special Exception");
                }

                public static void main(String[] args) {
                    try {
                        riskyMethod();
                        System.out.println("Method executed successfully.");
                    } catch (Exception e) {
                        System.out.println("Caught an exception: " + e.getMessage());
                    } finally {
                        System.out.println("Finally block executed.");
                    }
                }
            }

選択肢

  • A. Method executed successfully.
  • B. Caught an exception: Special Exception
  • C. Finally block executed.
  • D. Caught an exception: Special Exception
    Finally block executed.

答えと解説

回答を見る

答え

D. Caught an exception: Special Exception
Finally block executed.

解説

基本説明

このプログラムは例外処理の例です。riskyMethodメソッドはExceptionをスローするため、try-catch-finally構文で処理されます。

tryブロック内で呼び出されたriskyMethodは、意図的に例外をスローし、それがcatchブロックによって捕捉されます。

その後、finallyブロックが実行され、必ず処理されるコードを記述することが可能です。

誤答理由

A選択肢は、riskyMethodが例外をスローするため、Method executed successfully.は表示されません。

Bのみは不適切です。例外はキャッチされますが、必ずfinallyブロックが実行されます。

C選択肢のみでは、キャッチされた例外が表示されないので不完全です。

つまずきポイント

例外がスローされたあとに実行されるfinallyブロックの存在を見落としがちです。

例えば、finallyブロックは例外の発生に関わらず実行されるので、システムリソースの解放など重要な処理が記述されています。

発展知識

Javaでは例外にはチェック例外と非チェック例外があります。Exceptionまたはそのサブクラスによってスローされるものがチェック例外です。

一方、RuntimeExceptionのサブクラスに属するものは非チェック例外で、コンパイル時に確認されないため、catchしなくてもコンパイルエラーは発生しません。

このプログラムでは、チェック例外としてスローされたため、catchブロックでの処理が必須となります。

目次