NullPointerException
読み:ナル-ポインター-イクセプシャン
外語:NPE: NullPointerException
Javaで、妥当なオブジェクトを指していない変数に対してメソッド呼び出しをした際に発生する例外。日本では俗に「ぬるぽ」と呼ばれる。
概要
NullPointerExceptionクラスは、java.lang.RuntimeExceptionクラスのサブクラスである。
- java.lang.Object
- java.lang.Throwable
- java.lang.Exception
- java.lang.RuntimeException
- java.lang.NullPointerException
特徴
発生原因
ぬるぽは、Javaでは非常に良く発生する例外の一つで、例えば次のような場合に発生しうる。
public class nurupo {
public static void main(String[] args) {
String hoge = null;
int len;
len = hoge.length();
}
}
この時、hoge.length();でぬるぽが発生する。
定義の時点でnullを代入し、無効なオブジェクトとしているものに対してメソッドを呼び出したからである。
ここでは意図的に分かり易く書いてあるが、実際にはもっと分かりづらい場面でぬるぽは発生し、プログラマーを悩ませる。例えばクラスのフィールドのうち、参照型の初期値はnullであるので、これを未定義のまま参照するとぬるぽが発生する。
try-catch NullPointerException
NullPointerExceptionは、実行時例外である java.lang.RuntimeException のサブクラスであるため、RuntimeException と同様、try-catch文での例外処理を書かなくてもコンパイルエラーは生じない。
これをキャッチすることも可能である。
String hoge = null;
int len = 0;
try {
len = hoge.length();
} catch (NullPointerException e) {
// 例外を無視
}
しかし例外を無視するような方法は推奨されない。ぬるぽが生じるのは必ず原因があるが、この方法はその根本原因が解決していないからである。
また、事前にnullかどうか確認する方法と比して性能上のオーバーヘッドが大きい。
再検索