“ Throwable”はErrorクラスとExceptionクラスの親クラスです。 クラス「RuntimeException」とそのサブクラス、クラス「Error」とその子クラスは「未チェックの例外」ですが、クラス「Exception」の残りのサブクラスは「RuntimeException」を除き、チェック済みの例外です。 チェック済み例外と未チェック例外の基本的な違いは、 チェック済み例外がコンパイラーによってチェックされるのに対して、コンパイラーは未チェック例外をチェックしないことです 。
比較チャートを使用して、チェック済み例外と未チェック例外の他の違いについて説明します。
比較表
比較基準 | チェック済み例外 | 未チェックの例外 |
---|---|---|
基本 | コンパイラはチェックされた例外をチェックします。 | コンパイラは未チェックの例外をチェックしません。 |
例外のクラス | 「RuntimeException」クラスを除く「Exception」クラスのすべての子クラス、および「Error」クラスとその子クラスはChecked Exceptionです。 | "RuntimeException"クラスとその子クラスは、 "未チェックの例外"です。 |
取り扱い | チェック例外を処理しない場合は、コンパイラオブジェクトが処理されます。 | 未チェックの例外を処理しなくても、コンパイラは反対しません。 |
編集 | プログラムコードに未処理のチェック済み例外があると、プログラムはコンパイルされません。 | プログラムコードに未処理の未チェック例外があっても、プログラムは正常にコンパイルされます。 |
チェック例外の定義
チェック例外は、プログラムの円滑な実行のためにコンパイラによってチェックされる例外です。 コンパイラは、プログラムがチェック済み例外を処理できるかどうかをチェックします。 コードが例外を処理できない場合は、コンパイルエラーが発生します。 RuntimeExceptionクラス以外のクラス "Exception"のすべてのサブクラスは、チェックされた例外です。
例を使用してチェック済み例外を調べてみましょう。
import java.io. *; クラス例{public static void main(String args []){FileInputStream fis = null; fis = new FileInputStream( "B:/myfile.txt"); //このコンストラクタFileInputStream(File filename)は、チェック例外であるFileNotFoundExceptionをスローします。 int k; while((k = fis.read())!= -1){// FileInputStreamクラスのread()メソッドでも、チェック済み例外:IOExceptionがスローされます。 System.out.print((char)k); fis.close(); //メソッドclose()は、IOExceptionをスローしたファイル入力ストリームを閉じる。 }}
上記のコードでは、ファイルの内容を開いて読み取り、表示しようとしています。 ファイルが存在しないことがあります、そして、チェックされた例外であるFileNotFoundExceptionが発生するでしょう。 チェック例外が処理されない場合、コンパイラはプログラムをスムーズにコンパイルすることを許可しません。 コンパイル時エラーが表示されます。 そのため、円滑なコンパイルのためには、チェック済み例外をキャッチするか、またはスローするように宣言する必要があります。
未チェック例外の定義
未チェック例外は、コンパイラによってチェックされない例外です。 例外がコードによって処理されない場合でも、コンパイラはプログラムを正常にコンパイルします。 クラス "Error"とその子クラス、クラス "Runtime"とそのサブクラスは未チェックの例外です。
未チェックの例外の例を見てみましょう。
クラス例{public static void main(String args []){int arr [] = {1, 2, 3, 4, 5};} System.out.println(arr [7]); // ArrayIndexOutOfBoundsException。 }}
上記のコードでは、存在しない要素にアクセスしようとしているので、ArrayIndexOutOfBoundsExceptionがあることがわかります。 これは未チェックの例外なので、コンパイル時エラーは発生せず、ファイルはエラーなしでコンパイルされます。 しかし、例外が処理されるまでプログラムは実行されません。 そのため、円滑な実行のためには、例外をキャッチまたは宣言する必要があります。
チェック例外と未チェック例外の主な違い
- チェックされた例外はコンパイラの知識にあり、チェックされていない例外はコンパイラの知識にありません。
- RuntimeExceptionとErrorクラスを除き、すべてのクラスが例外チェックされます。 一方、RuntimeExceptionクラスとErrorクラスは未チェックの例外です。
- チェックされた例外がコードによって処理されない場合、コンパイラはオブジェクトを生成します。 一方、コード内で未チェックの例外を処理しないと、コンパイラは反対しません。
- チェック済み例外がコード内で発生した場合、コードはコンパイルされませんが、チェックされていない例外がコードによって処理されない場合でも、コンパイラはコードをコンパイルします。
注意 :
実行時に、チェック済みまたは未チェックの両方の例外が強制的に発生します。 それらはコンパイル時にコンパイラによってチェックされるか、またはチェックされないだけです。
結論:
プログラムを円滑に実行するために、チェック済み例外と未チェック例外の両方を処理する必要があります。