Javaの2つの例外タイプが「チェック済み」と「チェックなし」という名前の理由は何ですか?それらの名前の背後にある理由は何ですか?
4 に答える
チェックされた例外(など)をスローするように宣言されたメソッドを呼び出すとIOException
、コンパイラは、それをキャッチしているか、再スローすることを宣言しているかをチェックします。同様に、そもそもそのようなチェックされた例外をスローするために、コンパイラは、メソッドシグネチャの一部としてそれを宣言したことをチェックします。
基本的に、メソッドによってスローされる例外を除いて、型チェックに少し似ています。
コンパイラは、チェックされていない例外のチェックを実行しません。そのため、メソッドが例外を宣言しなくても、どのメソッドでも例外をスローできます。
チェックされた例外は、Javaコンパイラによってチェックされます。例外をキャッチするか、メソッドシグネチャで宣言するかをチェックします。
「チェック済み」とは、それをキャッチするか、メソッドが署名にスローすることを宣言する必要があることを意味します。メソッドのユーザーは、チェックされた例外をキャッチする必要があります。そうしないと、コンパイラエラーが発生します。
「チェックされていない」とは、あなたもあなたのメソッドのユーザーも例外をキャッチする必要がないことを意味します。メソッドシグネチャのthrows句で宣言する必要はありません。
その初期の化身では、Javaは最初のものを頻繁に選択しました。
C#では、チェックされていない例外がデフォルトになります。Java開発者も今その慣習を取り入れています。
Javaでは、任意のをスローできますThrowable
。Throwableには2つのサブクラスがあります:Error
とException
。がError
スローされると、コードとはほとんど関係のない深刻な問題が発生します。このような例外はコンパイラによってチェックされず、チェックされていない例外の例です。
例外には、と呼ばれるサブクラスRuntimeException
があります。これらは多くの場合、コードのバグを示す例外であり、ほとんどのコードの多くの場所で発生する可能性があります。例としてはNullPointerException
、、などがあります。これらのキャッチをコードに散らかすため、ArrayIndexOutOfBoundsException
これらもチェックされていません。
他のすべての例外はコンパイラによってチェックされるため、キャッチまたはスローする必要があります。