-2

Nullpointerexception は実行時例外と見なされ、例外をスローするメソッド シグネチャですべての実行時例外を宣言する必要はありません。しかし、NullPointerException はコンパイル エラーを表示します - ハンドルされていない例外です! なぜそうなのですか?

1...void doMore(){
2...    throw new NullPointerException();
3...}

行 2 はコンパイル エラーを示していますが、他の実行時例外 (NullArgumentException など) がスローされた場合、コンパイル エラーは発生しません。NullPointerException は本当にチェックされていない例外ですか?

4

5 に答える 5

3

NullPointerException他の例外と同様に、コード内のどこでもa を使用できます。ただし、未チェックの例外であるため、関数本体で宣言する必要はなく、処理する必要もありません。したがって、コンパイラ エラーが発生した場合、それは が原因ではNullPointerExceptionなく、投稿していないコード内の他の問題が原因です。

このようなメソッドは、エラーなしで非常にうまくコンパイルされます。

void doSomething() {
    throw new NullPointerException();
}
于 2013-07-04T05:42:10.043 に答える
1

いいえ、NullPointerException はRuntimeException を拡張するためです

メソッドは、メソッドの実行中にスローされる可能性があるがキャッチされない可能性のある RuntimeException のサブクラスをその throws 句で宣言する必要はありません。

于 2013-07-04T05:36:12.900 に答える
0

できますが、NPE は未チェックの例外であるため、そうする必要はありません。

于 2013-07-04T05:43:53.697 に答える
0

「doMore()」メソッドは、NullPointerException がチェックされていない例外であるかどうかを証明するためのものだと思います。それらをスローするメソッドが必要な理由がわかりません。

確かに、それはチェックされていません。実際、Eclipse を使用してコードを新しいクラスに貼り付けても、コンパイラ エラーは発生しません。したがって、これは、IDE 構成が null 相対コード検証で厳密であるか、コード スニペットに表示されないその他のエラーに関係していると思います。

于 2013-07-04T05:45:25.060 に答える