例外処理を用いたメソッドの使い方について学んでいきましょう。
問題
次のコードを実行したときに出力される結果はどれですか?
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ブロックでの処理が必須となります。