Java でチェックされた例外とチェックされていない例外
このチュートリアルでは、Java でチェックされている例外とチェックされていない例外を紹介します。
Java では、例外はコードの実行中に発生し、実行を異常終了させる状況です。この例外は、コンパイル時または実行時に発生する可能性があります。Java は、例外をチェック付きとチェックなしの 2つのタイプに大まかに分類します。コンパイル時にコンパイラーによってチェックされる例外は、チェックされた例外と呼ばれます。一方、実行時にチェックされる例外は、チェックされていない例外と呼ばれます。
例外を処理するために、Java は、NullPointerException
、ArrayIndexOutofBoundsException
、IOException
などの各例外のクラスを提供します。Exception
クラスは、すべての例外クラスおよび Exception のサブクラスであるすべてのものの上にあります。``RuntimeException
とそのサブクラスを除いて、チェックされた例外です。
ArithmeticException
、NullPointerException
、ArrayIndexOutOfBoundsException
などの RuntimeException
を継承する例外クラスは、チェックされていない例外と呼ばれます。これらは実行時にチェックされます。
Java でチェックされた例外
まず、例外とは何か、そしてそれがコードの実行にどのように影響するかを理解しましょう。この例では、ファイルにデータを書き込んでいます。このコードは、FileNotFoundException
、IOException
などの例外が発生する傾向があります。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)