NullPoinerException(NPE)
1956 ワード
Javaでは、java.lang.NullPointerExceptionがうっかり現れることがあります.この文章は主にこの異常なタイプを紹介します.
この異常タイプは何ですか?
まず、次のコードを見てみましょう.
参照タイプの変数を宣言すると、変数に格納されるのは本当の値ではなく、参照です.たとえば、
宣言文ではnumという参照タイプ(
reference type)変数です.この変数には本当の値ではなく、ポインタが含まれています.(ポインタという言い方は正確ではありません.JavaではC C++にポインタの概念がありたくないので、参照の概念しかありません).しかし、Javaはどこを指しているのか説明していません.つまり、Javaはnullを指しています.つまり、私の変数はどこを指していません.2行目では、Integerタイプのインスタンスを作成し、numに参照を割り当てます.よし、numは終わりですそこで、このポインタでオブジェクトを操作することができます(.演算).
ただし、変数(参照タイプ)を宣言した後の値なし文は、次のように直接使用されます.
どんな場合にNPEが現れますか?
sunの公式ドキュメントには、NPEを放出する場合がいくつかリストされています. Calling the instance method of a Accessing or modifying the field of a Taking the length of Accessing or modifying the slots of Throwing
詳細については、以下を参照してください.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
この異常タイプは何ですか?
まず、次のコードを見てみましょう.
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を放出する場合がいくつかリストされています.
null
object null
object. null
as if it were an array. null
as if it were an array 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