MENU

【Java Silver】例外処理とチェック例外の理解

例外処理に関する問題です。しっかり理解していきましょう。

問題

次の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.

目次