Javaプログラムでの例外処理について学んでいきましょう。
問題
次のプログラムを実行した場合にスローされる例外はどれでしょうか?正しい選択肢を選んでください。
import java.io.*;
public class ExceptionTest {
public static void main(String[] args) {
try {
FileReader file = new FileReader("nonexistentfile.txt");
BufferedReader fileInput = new BufferedReader(file);
fileInput.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
選択肢
- A. java.io.FileNotFoundException
- B. java.lang.NullPointerException
- C. java.io.IOException
- D. コンパイルエラー
答えと解説
回答を見る
答え
A. java.io.FileNotFoundException
解説
基本説明:
Javaではファイルにアクセスしようとする際、FileReaderを使用します。指定されたファイルが存在しない場合には、java.io.FileNotFoundExceptionというチェック例外がスローされます。
この例外はファイルにアクセスする前に、プログラムレベルでのエラーハンドリングを要求するもので、プログラムの実行を継続的に管理するためにtry-catchブロックで対処する必要があります。
誤答理由:
選択肢Bのjava.lang.NullPointerExceptionは、オブジェクトがnullであるにもかかわらずメソッドを呼び出すときに発生する非チェック例外で、今回の問題とは異なります。
選択肢Cのjava.io.IOExceptionは、FileNotFoundExceptionのスーパークラスですが、正確にはFileNotFoundExceptionが発生します。
つまずきポイント:
Javaの例外は多岐にわたり、それぞれ狙いがあるため、適切な例外を選択することは容易ではありません。特に、スーパークラスとサブクラスの関係を理解し、具体的な例外を選ぶ訓練が必要です。
また、チェック例外と非チェック例外の違いを知ることで、例外処理全般への理解を深める助けとなります。
発展知識:
例外処理の理解を深めるためには、その種類や適用されるシナリオを常に意識することが大切です。Javaがどのようにしてプログラムの予期しない動作を管理するかを理解するための基礎として、例外キャッチの仕組みを学ぶことが有用です。
また、例外を投げる状況と、それがプログラム全体にどのように影響を与えるかを探求すると、更なる知識の習得が可能です。