Java でチェックされた例外とチェックされていない例外

Mohammad Irfan 2023年10月12日
  1. Java でチェックされた例外
  2. Java でチェックされていない例外
Java でチェックされた例外とチェックされていない例外

このチュートリアルでは、Java でチェックされている例外とチェックされていない例外を紹介します。

Java では、例外はコードの実行中に発生し、実行を異常終了させる状況です。この例外は、コンパイル時または実行時に発生する可能性があります。Java は、例外をチェック付きとチェックなしの 2つのタイプに大まかに分類します。コンパイル時にコンパイラーによってチェックされる例外は、チェックされた例外と呼ばれます。一方、実行時にチェックされる例外は、チェックされていない例外と呼ばれます。

例外を処理するために、Java は、NullPointerExceptionArrayIndexOutofBoundsExceptionIOException などの各例外のクラスを提供します。Exception クラスは、すべての例外クラスおよび Exception のサブクラスであるすべてのものの上にあります。``RuntimeException とそのサブクラスを除いて、チェックされた例外です。

ArithmeticExceptionNullPointerExceptionArrayIndexOutOfBoundsException などの RuntimeException を継承する例外クラスは、チェックされていない例外と呼ばれます。これらは実行時にチェックされます。

Java でチェックされた例外

まず、例外とは何か、そしてそれがコードの実行にどのように影響するかを理解しましょう。この例では、ファイルにデータを書き込んでいます。このコードは、FileNotFoundExceptionIOException などの例外が発生する傾向があります。catch ハンドラーは提供されていません。これらはチェックされた例外であるため、Java コンパイラーはコードをコンパイルせず、コンパイル時に例外をスローします。以下の例を参照してください。

import java.io.FileOutputStream;

public class SimpleTesting {
  public static void main(String[] args) {
    FileOutputStream fout =
        new FileOutputStream("/home/root/eclipse-workspace/java-project/myfile.txt");
    fout.write(1256);
    fout.close();
    System.out.println("Data written successfully");
  }
}

出力:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	Unhandled exception type FileNotFoundException
	Unhandled exception type IOException
	Unhandled exception type IOException

	at SimpleTesting.main(SimpleTesting.java:8)

コードの異常終了を回避するには、コードに catch ハンドラーを提供する必要があります。以下は上記と同じコードですが、コードが途中で終了して正常に実行されないように、catch ハンドラーがあります。以下の例を参照してください。

import java.io.FileOutputStream;
public class SimpleTesting {
  public static void main(String[] args) {
    try {
      FileOutputStream fout =
          new FileOutputStream("/home/irfan/eclipse-workspace/ddddd/myfile.txt");
      fout.write(1256);
      fout.close();
      System.out.println("Data written successfully");
    } catch (Exception e) {
      System.out.println(e);
    }
  }
}

出力:

Data written successfully

Java でチェックされていない例外

次のコードは、チェックされていない例外である ArrayIndexOutOfBoundsException をスローします。このコードは正常にコンパイルされますが、配列の範囲外の要素にアクセスしているため実行されません。したがって、コードは実行時例外をスローします。以下の例を参照してください。

public class SimpleTesting {
  public static void main(String[] args) {
    int[] arr = {3, 5, 4, 2, 3};
    for (int i = 0; i < arr.length; i++) {
      System.out.println(arr[i]);
    }
    System.out.println(arr[23]);
  }
}

出力:

3
5
4
2
3
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 23 out of bounds for length 5
	at SimpleTesting.main(SimpleTesting.java:9)

関連記事 - Java Exception