あなたが参照変数(つまり、オブジェクト)を宣言すると、そのオブジェクトへのポインタを作成するために実際にあります。
変数は、プリミティブ型intを宣言した前記次のコード:
int x;
x = 10;
変数xがintであるこの例では、Javaはゼロに初期化されます。彼は値10に割り当てられた場合、10はメモリ位置参照X.に書き込まれます。
あなたが参照型を宣言しようとすると、しかし、それはエラーになります。次のコード:
Integer num;
num = new Integer(10);
最初の行は、変数名を宣言NUMを、それが参照型であるため、彼をコピーするためのシステムのデフォルト値は、nullを。
2行目は、新しいキーワードは、オブジェクトをインスタンス化するために使用されます。ポインタ変数NUM最初の行整数ターゲットに割り当てられたが、その後、ポインタがヌルパケットであろう。
この変数を宣言しますが、オブジェクトを作成していない場合に発生するNullPointerExceptionが。ポインタので、実際には存在しないいくつかのものがあります。
あなたがオブジェクトを作成する前に間接参照NUMにしようとすると、それは、NullPointerExceptionが報告されます。通常の状況下では、コンパイラは、問題を見つけて、あなたが知っているだろう。numが初期化されていない可能性があります(numは初期化されていない)
「しかし、時には、あなたは直接オブジェクトを作成するコードを記述することはできません。
たとえば、次の方法:
public void doSomething(SomeObject obj) {
//do something to obj
}
このケースでは、オブジェクトobjを作成する必要はありませんが、それはdoSomethingの()メソッドを呼び出す前に作成されていると仮定します。このメソッドを呼び出すことが可能であることに注意してください。
doSomething(null);
この場合、objがnullです。この方法は、何かを渡されたオブジェクトを意図している場合、それはプログラマのエラーに提示されているので、NullPointerExceptionがスローするのが適切である、プログラマは、デバッグにこの情報が必要になります。
あるいは、ケースがあるかもしれない、入ってくるオブジェクトを操作するためのこの方法の目的は、このように(空のパラメーター)では許容可能であり得ます。この場合には、NULLかどうかを決定するのに必要なパラメータ、および他の実装は他の条件を与えられました。これは、文書内のことを説明すべきです。例えば、doSomethingのは()のように書くことができます。
public void doSomething(SomeObject obj) {
if(obj != null) {
//do something
} else {
//do something else
}
}