Hatena Blog Tags

NullPointerException

(コンピュータ)
ぬるぽいんたーえくせぷしょん

プログラミング言語の一つであるJava言語の(実行時)例外クラス、java.lang.NullPointerException
簡潔に言えば「null値の参照型変数を参照している」という例外。たとえばJava 5(J2SE 5.0)以上で有効なこのコード。

"".contains((java.lang.CharSequence)null);

これはStringクラスのJava7版Javadocに書いてあるとおりなのだが、そうでなくても普通にJavaプログラミングをしていると例外なくお目にかかる。あまりにもよく目にするため、しばしば「ぬるぽ」とか「NPE」などと縮めて呼ばれる*1
プログラムの動作異常として「ぬるぽ」に出会った場合、原因究明に手間取り時間を浪費してしまうことが多い。そして、この例外が原因である場合には、とてもがっかりしてやる気を失ってしまうことがままある。


回避するためには、

  • 「オブジェクトの空白を表す状態」にnullを使わずに、空っぽの状態を示すオブジェクトを定義する(Stringオブジェクトにおける空白文字列 "" に相当する状態のことである)
  • nullを返す恐れのあるメソッドでは、しっかりと返り値チェックを行う
  • オブジェクト変数をnullで初期化しない*2

などの方法が挙げられる。
同様のエラー(nullで表現されるメモリ空間へのアクセス)は他の言語でも*3発生する可能性があるので、そのオブジェクト変数(もしくはポインタ)がどのメモリ空間を指しているのかを意識しながらプログラムを行うのが重要である(メモリはどこで確保されて、誰が開放してくれるのか、など)。

*1:nullを英語読みして「なるぽ」と呼ばれることもある。

*2:特に、Stringオブジェクトでは初期化の次に空文字「""」をセットしておく事が重要。これだけで回避できるNullPointerExceptionは数多くある。

*3:少なくともJavaプラットフォーム上の言語では

このタグの解説についてこの解説文は、すでに終了したサービス「はてなキーワード」内で有志のユーザーが作成・編集した内容に基づいています。その正確性や網羅性をはてなが保証するものではありません。問題のある記述を発見した場合には、お問い合わせフォームよりご連絡ください。

ネットで話題

もっと見る

関連ブログ