無料プログラミングスクール「アキバ・テックドリーム・アカデミー」(以下、テクドリ)の運営企業であるメディアファイブ株式会社に所属する現役エンジニア社員が、「NullPointerException」とは何か、実際のサンプルコードを元に原因と対策について解説します!
NullPointerExceptionとは
「NullPointerException」とは、nullというデータが何もない状態のオブジェクトにアクセスしようとした時に発生する例外です。
NullPointerExceptionが発生する例
例外が発生しない正常なサンプルコード
下記のサンプルソースは、変数「sample」に代入された値とその長さを出力するソースコードです。
このソースコードを実行すると「sample」に代入された値である「あきはばら」と文字列の長さが正常に出力されます。
public class SampleClass1 {
public static void main(String[] args) {
String sample = "あきはばら"; // sample に「あきはばら」を代入
System.out.println(sample); // sample の値を出力
System.out.println(sample.length()); // sample の値の長さを出力
}
}
実行結果
あきはばら
5
例外が発生する異常なサンプルコード
上記の正常なサンプルコードの変数「sample」に、nullを代入した場合、長さを取得するlength()メソッドが、null が代入された「sample」の値の長さを取得しようとし、NullPointerExceptionが発生します。
nullのオブジェクトにアクセスしたため、この例外が発生します。
public class SampleClass2 {
public static void main(String[] args) {
String sample = null; // sample に「null」を代入
System.out.println(sample); // sample の値を出力
System.out.println(sample.length()); // sample の値の長さを出力
}
}
実行結果
null
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "" is null
at SampleClass2.main(SampleClass2.java:7)
NullPointerExceptionに対しての対策
NullPointerExceptionを起こさせない対策として、あらかじめオブジェクトが null でないかをチェックする方法があります。
前項のサンプルコードを元に解説します。
対象オブジェクトがnullではない場合のサンプルコード
オブジェクトにアクセスする前に null でないかのチェックを行います。
public class SampleClass3 {
public static void main(String[] args) {
String sample = "データあり"; // sample に「データあり」を代入
System.out.println(sample); // sample の値を出力
if (sample != null) {
System.out.println(sample.length()); // sample がnull でない時の処理
// sample の値の長さを出力
} else {
System.out.println("nullが代入されています。"); // sample がnull である時の処理
// null を検知した時のメッセージを出力
}
}
}
「if (sample != null) { 」が変数の「sample」がnull かどうかを判定しています。
null ではない場合は次の行の処理を行います。
System.out.println(sample.length());
null の場合、「 } else { 」の次の行の処理を行います。
System.out.println("nullが代入されています。");
実行結果
データあり
5
データがnull ではない場合、「あきはばら」の後に文字列の長さが出力されています。
対象オブジェクトがnullの場合のサンプルコード
「sample」にはnull が代入されていますが、「NullPointerException」を発生させずにnull であるときの処理を実行できます。
public class SampleClass4 {
public static void main(String[] args) {
String sample = null; // sample に「null」を代入
System.out.println(sample); // sample の値を出力
if (sample != null) {
System.out.println(sample.length()); // sample がnull でない時の処理
// sample の値の長さを出力
} else {
System.out.println("nullが代入されています。"); // sample がnull である時の処理
// null を検知した時のメッセージを出力
}
}
}
実行結果
null
nullが代入されています。
NullPointerExceptionのまとめ
今回は、プログラミング初心者が最初につまずく例外のひとつ、NullPointerExceptionについて解説しました。
NullPointerExceptionとは、nullというデータが何もない状態のオブジェクトにアクセスしようとした時に発生する例外です。
この例外は発生する頻度が高いエラーの一つで初心者の方はもちろん、経験を積んだエンジニアでも起こり得るエラーです。
エラーの起こった原因と解消法を学んでいき、エラーの少ないプログラミングができるエンジニアを目指しましょう!
当校テクドリは無料プログラミングスクールです。現役エンジニアの講師が学習をしっかりサポートします!
6ヶ月以上の学習期間が設けられているため、プログラミング未経験者でも安心して学べます。
卒業後は、運営企業のメディアファイブが正社員のITエンジニアとして採用されるため、就職、転職活動は不要です。
ご興味がある方は、ぜひ下記リンクから無料体験セミナーにお申し込みください!