今回は、例外処理に関する問題を解いてみましょう。
問題
次のプログラムを実行した場合の出力はどれになるでしょうか?正しい選択肢を選んでください。
public class Main {
public static void main(String[] args) {
try {
int result = divide(10, 0);
System.out.println("Result: " + result);
} catch (ArithmeticException e) {
System.out.println("ArithmeticException caught");
} finally {
System.out.println("Finally block executed");
}
}
public static int divide(int a, int b) {
return a / b;
}
}
選択肢
- A. Result: 0
- B. ArithmeticException caught
- C. ArithmeticException caught
Finally block executed - D. Result: 0
Finally block executed
答えと解説
回答を見る
答え
C. ArithmeticException caught
Finally block executed
解説
基本説明:
Javaで例外処理を行うにはtry-catch-finally
ブロックを使用します。
try
ブロックには例外が発生する可能性のあるコードを記載します。
今回の問題では、divide
メソッドが10 / 0
というゼロによる除算を行いますので、ArithmeticException
が発生します。
そのArithmeticException
は、次のcatch
ブロックでキャッチされ、「ArithmeticException caught」というメッセージが表示されます。
最後に、finally
ブロックが実行され、「Finally block executed」が出力される仕組みです。
誤答理由:
選択肢AとDは除算が正常に行われる予想ですが、ゼロによる除算は例外を引き起こし、通常の値を返しませんので誤りです。
選択肢Bはcatch
ブロックの出力だけで、finally
ブロックの実行を考慮していないため不正解です。
つまずきポイント:
初心者が特に注意すべきはfinally
ブロックの存在です。finally
は例外が発生しても、しなくても必ず実行されます。
例えば、リソースの解放や後処理を確実に行いたい場合に利用されます。
さらに、似たような例外の処理を行う際に、例外の種類によって異なるcatch
を用意することもあります。
発展知識:
例外処理はプログラムの安定動作に重要です。try-with-resources
構文を使うと、リソースの解放を自動で行うことができ、finally
をより利便性の高い形で利用できます。
特定のJDKバージョン以上に対し、try-with-resources
の理解を深めておくと良いでしょう。
さらなる発展として、ユーザー定義の例外クラスを作成し、詳細なエラーメッセージと共にエラーを管理する方法も、プログラミングの質を向上させます。