🔴

【最新版】JavaでNullPointerExceptionっていうエラーが出たときの対処法

2024/10/11に公開

はじめに

こんにちは。RaimuProjectのやむぅです。
今回は、Javaのコーディング中に起きたエラー「NullPointerException」の解説や対処法についてお話ししていきます。
どんな不具合なのか、どうやって調査・対処すればいいの?という人向けに書いたものです。ぜひ読んで見ていただけると嬉しいです。

※ ちょこっと紹介!
現役エンジニアの僕が教える、フルスタックエンジニアを目指せるスクールを運営しています。
プログラミング初心者の方やリスキリングを考えている方にぜひ!

https://programing-factory.raimuproject.com/lp

開発環境

今回僕のMacを使っています。
そのためショートカットキーを使う際、WindowsのPCを使う人は以下のように変換して記事を見てください。

Mac Windows
⌘(Cmd) Ctrl
⌥(Option) Alt
⇧(Shift) Shift

:::note warn
ex)コピーのショートカット:
Mac → ⌘ + c
Windows → Ctrl + c
:::

エラー発生

Javaのプログラムを実行したらこんなエラーが発生した。

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null
	at testJava.Main.main(Main.java:8)

エラーの意味

このエラーメッセージは java.lang.NullPointerException で、よくぬるぽと呼ばれているやつです。これはNull参照に対して操作を試みた際に発生する例外で、具体的には、今回strという変数がnullであるにも関わらず、length()というメソッドを呼び出そうとしているため、「そもそも文字どころか何もないじゃん!」とエラーが発生しています。

原因と調べ方

まずこのエラーの原因は、変数strがnullの状態にもかかわらず、その変数に対してlength()←文字数を求めるメソッドを呼び出したことです。null には実際のオブジェクトが存在しないため、メソッド呼び出しができずに例外が発生しました。

では次に調べ方ですが、まずはエラーメッセージを見ていきましょう。

エラーメッセージの内容: testJava.Main.main(Main.java:8) という記述から、エラーがMain.javaファイルの8行目で発生していることが分かります。コードの該当部分を確認してstrがどのように使用されているかを見ます。
このstrの初期化状態→どこで宣言・初期化されているのか、また、nullの状態になる可能性があるか確認します。
確認する方法として、一番シンプルかつ初心者向けのやり方としては、nullになっていそうな箇所の後ろにSystem.out.println(str);を置き、strの値がどこでnullになっているかを確認するといいでしょう。

String str = "あいうえお";

str = null; // ←ここでnullになってそう!(なってる)
System.out.println(str); // ←strを出力して中身確認!

対処法

対処法は状況と場合によっていろいろありますが、

  • nullチェックを追加すること
    strnullでないことを確認してから.length()メソッドを呼び出すようにしましょう。
if (str != null) {
    System.out.println(str.length());
} else {
    System.out.println("ヌルじゃん");
}

このようにしてNullPointerExceptionを回避して、というよりnullのものを処理させないようにしましょう。

最後に

この記事では、プログラミングをやり始めた初心者から実際にエンジニアとして働いた時の実務のコーディング中に発生したエラーやバグの調査方法から対処法、基礎的な知識をできる限りさっくりわかりやすく解説しています。

その他

現役エンジニアの僕が教える、

  • チャット質問で悩み解決
  • 週一で1 on 1メンタリング実施あり
  • 実務レベルの高難易度課題 & レビューあり
  • あなた専用のロードマップを一緒に作成
  • 案件や実務のエンジニアのリアルが学べる & 体験できる
  • 未経験から4ヶ月で<font color="OrangeRed">フルスタックエンジニア</font>を目指せる

こんな内容が学べる・経験できるプログラミングスクールです。
プログラミング初心者の方やリスキリングを考えている方にぜひ!

https://programing-factory.raimuproject.com/lp

Discussion