MENU

【Java Silver 試験】例外処理の仕組みとチェック例外、非チェック例外、エラーの違い

これからJavaの例外処理に関する問題に取り組みましょう。

問題

次のコードが実行されたときの結果はどれでしょうか?正しいものを選んでください。


import java.io.FileNotFoundException;
import java.io.FileReader;

public class ExceptionTest {
    public static void main(String[] args) {
        try {
            FileReader file = new FileReader("nonexistentfile.txt");
            System.out.println("File opened successfully.");
        } catch (FileNotFoundException e) {
            System.out.println("File not found.");
        } finally {
            System.out.println("End of the program.");
        }
    }
}

選択肢

  • A. File opened successfully. End of the program.
  • B. File not found. End of the program.
  • C. コンパイルエラー
  • D. 実行時エラー

答えと解説

回答を見る

答え

B. File not found. End of the program.

解説

Javaでは例外処理としてtry-catch-finallyブロックを使用します。

このコードで使われているFileReaderはチェック例外を発生させます。

チェック例外とは、コンパイル時に検出される例外のことで、この場合はFileNotFoundExceptionです。

ファイルが存在しないためにFileNotFoundExceptionがスローされ、catchブロックが実行されます。

そのため、出力は「File not found.」になります。

さらにfinallyブロックが実行され「End of the program.」が続きます。

誤答理由

選択肢Aの「File opened successfully.」はファイルが正しく開かれた場合の出力ですが、今回ファイルは存在しないのでこれは不正解です。

選択肢Cのコンパイルエラーの場合、コードに文法ミスなどが存在すればコンパイルできませんが、今回は全て正しい構造になっています。

選択肢Dの実行時エラーも発生せず、正しい例外処理が行われています。

つまずきポイント

初学者がつまずきがちな点は、try-catch-finallyの流れとそれぞれの役割です。

特にfinallyブロックは例外が発生しても必ず実行されるため、資源の解放(ファイルやネットワーク接続のクローズ)に用いることが多いです。

発展知識

非チェック例外とは、RuntimeExceptionのサブクラスにあたる例外で、コンパイル時には検出されず、実行時にのみスローされます。

例えば、NullPointerExceptionArrayIndexOutOfBoundsExceptionがこれに該当します。

エラーは通常プログラムで対処できない状況で発生するもので、例としてはOutofMemoryErrorが挙げられます。

エラーは通常、プログラム側ではなく環境によるものであるため、サーバーのリソース管理などシステム全体の問題として扱う必要があります。

目次