はじめに
Javaで開発をしていると、誰もが一度は遭遇するエラーがあります。
Exception in thread "main" java.lang.NullPointerException
これは「NullPointerException(ヌルポ)」と呼ばれるエラーで、Java初心者にとっての“登竜門”とも言える存在です。
この記事では、NullPointerExceptionの正体・原因・対処法・予防策までを徹底解説します。これを読めば、もうヌルポに悩まされることはありません!
1. NullPointerExceptionとは?
NullPointerException は、**nullのオブジェクトに対してメソッドを呼び出したり、フィールドにアクセスしようとしたときに発生する例外(エラー)**です。
Javaの変数は、何も代入しなければ null という「何もない」状態になります。そこにアクセスしようとすると「何もないのにアクセスできるわけないだろ!」とJavaが怒るのです。
2. どんなときに起きるの?
❌ メソッドを呼び出すとき
String name = null;
System.out.println(name.length()); // NullPointerException
❌ フィールドにアクセスしたとき
User user = null;
System.out.println(user.id); // NullPointerException
❌ 配列やリストがnullのまま使われたとき
String[] names = null;
System.out.println(names[0]); // NullPointerException
3. エラーメッセージの読み方
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "name" is null
at Main.main(Main.java:5)
- Main.java:5 → 5行目でエラーが発生した
- because “name” is null →
nameがnullだった
Java 14以降では、どの変数がnullだったかも表示してくれるので、原因特定がしやすくなりました!
4. NullPointerExceptionが起きる5大原因とその対処法
原因①:変数が初期化されていない
String name; // nullのまま
System.out.println(name.length()); // NullPointerException
✅ 対処法:初期化する!
String name = "Java";
System.out.println(name.length()); // OK
原因②:メソッドの戻り値がnull
String value = getValue(); // getValue()がnullを返す
System.out.println(value.length()); // NullPointerException
✅ 対処法:戻り値がnullかチェック
if (value != null) {
System.out.println(value.length());
}
原因③:配列やリストがnull
List<String> names = null;
System.out.println(names.size()); // NullPointerException
✅ 対処法:newで初期化しておく
List<String> names = new ArrayList<>();
原因④:クラス内部での参照ミス
public class User {
Address address;
}
User user = new User();
System.out.println(user.address.city); // NullPointerException
✅ 対処法:内部のフィールドも初期化する
user.address = new Address();
System.out.println(user.address.city);
原因⑤:引数がnullだった
printLength(null);
void printLength(String str) {
System.out.println(str.length()); // NullPointerException
}
✅ 対処法:引数にnullが来ないようチェックする
if (str != null) {
System.out.println(str.length());
}
5. 効果的な予防法
✅ nullチェックを習慣にする
if (user != null && user.name != null) {
System.out.println(user.name.length());
}
✅ Objects.requireNonNull() を使う
import java.util.Objects;
public void setName(String name) {
this.name = Objects.requireNonNull(name, "名前はnullにできません");
}
✅ Optionalでnullを包む(Java 8以降)
Optional<String> maybe = Optional.ofNullable(name);
maybe.ifPresent(n -> System.out.println(n.length()));
6. nullをcatchするのはNG!?
よくある誤解:
try {
System.out.println(name.length());
} catch (NullPointerException e) {
System.out.println("nullでした");
}
✅ これは例外の使い方としてよくないです!
NullPointerExceptionは「発生しないように予防する」のが正しい対応です。
7. よくあるパターン別:実践コード集
名前がnullのときに「未入力」と表示
if (name == null || name.isEmpty()) {
System.out.println("名前が入力されていません");
} else {
System.out.println("こんにちは " + name + " さん");
}
nullを含むリストの処理
for (String item : list) {
if (item != null) {
System.out.println(item.toUpperCase());
}
}
8. 学習の進め方
NullPointerException は最初は難しいですが、nullという概念と上手に付き合うことがJavaの第一歩です!
まずは「絶対にJavaプログラマーになりたい人へ。」で基礎を固めて、nullと例外処理の理解を深めましょう。
さらに実践的な指導を受けたい方は、「サイゼントアカデミー」の学習サポートをぜひ活用してください!
まとめ
NullPointerExceptionは「nullなのに何かしようとした」エラー- 原因は「初期化忘れ」「戻り値がnull」「引数がnull」など
- 予防策はnullチェック・Optional・requireNonNull
- 例外処理に頼らず、nullが来ないコードを書くことが大事


コメント