NullPointerException 対策(その2)
samples/exception/nullpointer/Person.java - Eclipse SDK
|
package samples.exception.nullpointer;
public class Person {
String name;
}
|
|
samples/exception/nullpointer/NullPointer2.java - Eclipse SDK
|
package samples.exception.nullpointer;
public class NullPointer2 {
public static void main(String[] args) {
try {
Person p = new Person();
// Personオブジェクトのnameフィールドの
// 文字数を表示します。
System.out.println(p.name.length());
} catch (Exception e) {
e.printStackTrace();
}
}
}
|
|
ここでは、新しいクラス「Person」(人)を利用しようとしています。
Personクラスは「name」(名前)というフィールドを持っています。
NullPointer2クラスのmainメソッドでは、
まずPersonクラスのオブジェクトを作成しています。
次に、作成したPersonオブジェクトのnameフィールドに対して
lengthメソッドを呼び出し、その結果を表示しています。
(つまり、名前の文字数を表示しようとしています)
ところが、実行すると以下のようにNullPointerExceptionが発生します。
なぜでしょうか?
コマンド プロンプト
|
C:\JavaMaster\bin>java -cp . samples.exception.nullpointer.NullPointer2
java.lang.NullPointerException
at samples.exception.nullpointer.NullPointer2.main(NullPointer2.java:9)
|
クラスのフィールドが初期化されていない場合に、
フィールドに何が入っているかは、フィールドの型によって決まります。
大雑把には、次のようになります。
- 数値型 = 0
- 真理値型(boolean) = false
- 参照型(クラス、配列) = null
よって、Personクラスのオブジェクトを作成した直後のnameフィールドには、
nullが代入された状態となっています。
したがって、「p.name.length()」 とすると、
前回の例で説明た状況と同じく、nullに対してメソッドを呼び出すこととなり、
NullPointerException 例外を引き起こすのです。
|