【Java初心者向け】NullPointerExceptionとは?原因・対策

無料プログラミングスクール「アキバ・テックドリーム・アカデミー」(以下、テクドリ)の運営企業であるメディアファイブ株式会社に所属する現役エンジニア社員が、「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エンジニアとして採用されるため、就職、転職活動は不要です。

ご興味がある方は、ぜひ下記リンクから無料体験セミナーにお申し込みください!

まずは無料説明会・体験セミナー

テックドリームは無料のプログラミングスクールです。「プログラマってどういう仕事?」「自分にできるのかな?」という方も、まずは体験セミナーでプログラミングに触れてみませんか?テックドリームは未経験の方を丁寧にサポートする体制をご用意しています。不安なことや、入校までの疑問点なども気軽にご相談いただけます。

Webかんたん予約

専用の予約フォームより、およそ60秒で簡単にお申込みいただけます。

電話でのご予約

Webかんたん予約ができない場合や、ご質問がございましたら、お気軽にお電話ください。

0120-262-242
9:00~18:00(土日祝を除く)
最新情報をチェックしよう!
>未経験者向け無料プログラミングスクール

未経験者向け無料プログラミングスクール

アキバ・テックドリーム・アカデミー(テクドリ)は無料のプログラミングスクールです。
知識ゼロの未経験者でも6か月の研修を現役エンジニアの講師がサポートします。
スクール卒業後は、運営企業のメディアファイブに正社員登用!
秋葉原本校、福岡校にて無料体験セミナー実施中です。

CTR IMG