JavaのNullPointerExceptionとは?原因と対処法をわかりやすく解説

Java技術メモ

NullPointerExceptionはJava初心者の「あるある」エラー

Javaを学び始めてしばらくすると、ほぼ必ず一度は遭遇するエラーがあります。

Exception in thread "main" java.lang.NullPointerException

「何もないものを使おうとした」というエラーで、初心者はもちろん、ベテランエンジニアでも遭遇することがある定番のエラーです。

このエラーの仕組みを理解しておくと、原因の特定と修正がぐっと速くなります。


NullPointerExceptionとは

null とは、「何も参照していない状態」を表す特別な値です。

変数に null が入っているとき、その変数のメソッドを呼び出したりフィールドにアクセスしようとすると、Javaは「参照先がない」と判断してNullPointerExceptionを投げます。


よくある原因パターン

パターン① 変数を宣言しただけで初期化していない

String name;  // 宣言のみ、初期化していない
System.out.println(name.length());  // NullPointerException!

対処法: 宣言時に初期値を代入する。

String name = "";  // 空文字で初期化
System.out.println(name.length());  // OK → 0

パターン② メソッドがnullを返している

public String getName() {
    return null;  // nullを返している
}

String name = getName();
System.out.println(name.length());  // NullPointerException!

対処法: 使う前にnullチェックをする。

String name = getName();
if (name != null) {
    System.out.println(name.length());
}

パターン③ 配列の要素が初期化されていない

String[] names = new String[3];  // 要素はすべてnull
System.out.println(names[0].length());  // NullPointerException!

対処法: 配列の各要素に値を代入してから使う。

String[] names = new String[3];
names[0] = "田中";
System.out.println(names[0].length());  // OK → 2

パターン④ オブジェクトの初期化を忘れている

List<String> list;  // 宣言のみ
list.add("Java");  // NullPointerException!

対処法: newでインスタンスを生成する。

List<String> list = new ArrayList<>();  // インスタンス化
list.add("Java");  // OK

エラーメッセージの読み方

NullPointerExceptionが出たとき、スタックトレースに注目しましょう。

Exception in thread "main" java.lang.NullPointerException
    at Main.main(Main.java:8)

Main.java:8 は「Main.javaの8行目で起きた」という意味です。まずその行を確認し、どの変数がnullになっているかを特定するのが解決への近道です。


Java 14以降はエラーメッセージが親切になった

Java 14から、NullPointerExceptionのメッセージがより詳しくなりました。

Cannot invoke "String.length()" because "name" is null

「nameがnullだからlength()を呼び出せない」と具体的に教えてくれます。Java 14以降を使っている場合は、このメッセージを手がかりに原因を特定しましょう。


NullPointerExceptionを防ぐ習慣

  • 変数は宣言と同時に初期化する
  • メソッドの戻り値がnullになり得るか意識する
  • 外部から受け取った値は使う前にnullチェックをする
  • nullを返すメソッドを作らず、空文字や空のリストを返す設計にする

最初はnullチェックを書くのを忘れがちですが、「この変数はnullになり得るか?」を意識する習慣をつけるだけで、NullPointerExceptionの発生頻度はぐっと減ります。


Javaの基礎をしっかり学びたい方へ

NullPointerExceptionのようなエラーは、Javaの基礎をしっかり理解することで格段に減らせます。

学びテック のJava基礎コースでは、変数・オブジェクト・例外処理といった基礎を、演習問題を解きながら体系的に学べます。

  • ✅ ブラウザ上でコードを書いて実行できる
  • ✅ 演習問題で理解度を確認しながら進められる
  • ✅ 疑問は講師に直接質問できる(個別・グループ講義あり)

まとめ

  • NullPointerExceptionは「nullの変数にアクセスしようとした」ときに発生する
  • スタックトレースの行番号から原因箇所を特定する
  • 変数の初期化・nullチェックの習慣で防げる
  • Java 14以降はエラーメッセージがより詳しくなっている