例外処理に関する問題です。しっかり理解していきましょう。
問題
次のJavaプログラムをコンパイルして実行したときの結果はどれですか?正しいものを選んでください。
import java.io.*;
public class FileReadDemo {
public static void main(String[] args) {
try {
readFromFile("nonexistentfile.txt");
} catch (FileNotFoundException e) {
System.out.println("File not found");
} catch (IOException e) {
System.out.println("IO Exception occurred");
} finally {
System.out.println("Execution complete");
}
}
public static void readFromFile(String fileName) throws IOException {
FileReader fr = new FileReader(fileName);
}
}
選択肢
- A. File not found
- B. IO Exception occurred
- C. Execution complete
- D. File not found
Execution complete - E. IO Exception occurred
Execution complete
答えと解説
回答を見る
答え
D. File not found
Execution complete
解説
解説のポイント:
- 例外のキャッチ
- チェック例外と非チェック例外
- finallyブロックの重要性
Javaの例外処理は、プログラムの異常な状態をキャッチして、適切に対処するための機構です。
今回の問題では、FileReader
クラスを使って存在しないファイルを読み込もうとしています。
基本説明
FileReader
を使用する箇所で、存在しないファイルを読み込もうとするとFileNotFoundException
がスローされます。
これはJavaのチェック例外と呼ばれ、静的にチェックする必要があります。
そこで、try-catch
文によって例外をキャッチし、「File not found」と表示されます。
誤答理由
「IO Exception occurred」が表示されないのは、特定のFileNotFoundException
の方が先にキャッチされるためです。
また、「Execution complete」が表示されるのはfinally
ブロックの役割です。
つまずきポイント
例外処理において、何をキャッチするかを配慮しないと、想定しないエラーに対処できなくなります。
finally
ブロックは、例外の有無にかかわらず実行されることを覚えてください。
発展知識
Javaのtry-with-resources
ステートメントを使うと、リソースの開放を自動で行うことができます。
This pattern is particularly useful when dealing with resources like streams or file readers, ensuring all resources are properly released, thus avoiding potential resource leaks.