コーディングをしていると様々なエラーに遭遇します。
本記事では、Javaで発生する「NullPointerException」についてエラーの意味と解決方法を紹介します。
NullPointerExceptionは、時折ぬるぽと呼ばれ、
2ちゃんねるでガッカリ感・脱力感を表す用語として定着するほど、有名なエラーです。
原因
NullPointerExceptionは、null値が入った参照型変数を使おうとした際に発生する例外です。
- 例外とは、プログラム上で発生した予期しないエラーです。
- null値とは、変数に何も入ってないよという意味です。
- 参照型変数とは、オブジェクトがメモリ内のどこにあるかを参照する型です。
文字列型や配列、クラス型が該当します。
使おうとしたを具体的に表すと、
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/NullPointerException.html
null
オブジェクトのインスタンス・メソッドの呼出しnull
オブジェクトのフィールドに対するアクセスまたは変更null
の長さを配列であるかのように取得null
のスロットを配列であるかのようにアクセスまたは修正null
をThrowable
値であるかのようにスロー
具体例
nullオブジェクトのインスタンス・メソッドの呼出し
public class Main{
public static void main(String[] args){
Object Obj = null;
String toString = Obj.toString();
System.out.println(toString);
}
}
3行目の
Object Obj
= null
;
で、Object型のObjをnullで初期化しています。
5行目の
String
toString
=
Obj
.
toString
();
で、toStringメソッドを呼び出しています。
これは、nullオブジェクトのインスタンス・メソッドの呼出しによるNullPointerExceptionになります。
nullのスロットを配列であるかのようにアクセスまたは修正
public class Main{
public static void main(String[] args){
String[] name = null;
System.out.println(name[0]);
}
}
3行目の
String
[] name
= null
;
で、文字列型の配列nameをnullで初期化しています。
4行目で、name配列の0番目を表示させようとしています。
これは、nullのスロットを配列であるかのようにアクセスまたは修正したことによるNullPointerExceptionになります。
解決方法
呼び出したメンバ(フィールドやメソッド)がnullになっていないか確認することです。
上の具体例のNullPointerExceptionを回避する方法は、
public class Main{
public static void main(String[] args){
Object Obj = new Object();
String toString = Obj.toString();
System.out.println(toString);
}
}
3行目の
Object Obj
= new
Object
();
で、Object型のObjをインスタンス化します。
public class Main{
public static void main(String[] args){
String[] name = { "tanaka" };
System.out.println(name[0]);
}
}
3行目の
String
name
=
{
“tanaka”
};
で、文字列型の配列nameをnullで初期化するのではなく、”tanaka”で宣言しています。