NullPoinerException(NPE)

1956 ワード

Javaでは、java.lang.NullPointerExceptionがうっかり現れることがあります.この文章は主にこの異常なタイプを紹介します.
この異常タイプは何ですか?
まず、次のコードを見てみましょう.
int x;
x = 10;
最初の行はint基本タイプの変数を宣言し、Javaはそれを0に初期化します.つまり、変数xの値は0です.2行目はxが存在するメモリセルに10を書き込み、基本タイプなので元の0.Okに置き換えるのが順調で、意外ではありません.でも、
参照タイプの変数を宣言すると、変数に格納されるのは本当の値ではなく、参照です.たとえば、
Integer num;
num =  new Integer(10);

宣言文ではnumという参照タイプ(
reference type)変数です.この変数には本当の値ではなく、ポインタが含まれています.(ポインタという言い方は正確ではありません.JavaではC C++にポインタの概念がありたくないので、参照の概念しかありません).しかし、Javaはどこを指しているのか説明していません.つまり、Javaはnullを指しています.つまり、私の変数はどこを指していません.2行目では、Integerタイプのインスタンスを作成し、numに参照を割り当てます.よし、numは終わりですそこで、このポインタでオブジェクトを操作することができます(.演算).
ただし、変数(参照タイプ)を宣言した後の値なし文は、次のように直接使用されます.
Object obj = null;
System.out.println(obj.toString());
これは問題が来たので、objという変数は頭のないハエのように、どこを指しているのか分かりません.obj.toString()を呼び出すと、実はobjをコマンドして、toString()を実行してくれます.この方法.ああ、私はどこを指しているのか分からないが、私はどのように実行するか知っているのだろうか.つまり、仮想マシンはobjというポインタが指すオブジェクトのtoStringコードが見つからず、NullPointerException異常を投げ出した.
どんな場合にNPEが現れますか?
sunの公式ドキュメントには、NPEを放出する場合がいくつかリストされています.
  • Calling the instance method of a  null  object
  • Accessing or modifying the field of a  null  object.
  • Taking the length of  null  as if it were an array.
  • Accessing or modifying the slots of  null  as if it were an array
  • Throwing  null  as if it were a  Throwable  value.

  • 詳細については、以下を参照してください.http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/NullPointerException.html
    参照先:
    1.StackOverflowでのディスカッション:
    http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception
    2.いくつかのブログ:
    http://isagoksu.com/2009/development/java/how-to-avoid-nullpointerexceptions-npe/
    http://www.javacodegeeks.com/2012/06/avoid-null-pointer-exception-in-java.html