【最新版】JavaでNullPointerExceptionっていうエラーが出たときの対処法
はじめに
こんにちは。RaimuProjectのやむぅです。
今回は、Javaのコーディング中に起きたエラー「NullPointerException」の解説や対処法についてお話ししていきます。
どんな不具合なのか、どうやって調査・対処すればいいの?という人向けに書いたものです。ぜひ読んで見ていただけると嬉しいです。
※ ちょこっと紹介!
現役エンジニアの僕が教える、フルスタックエンジニアを目指せるスクールを運営しています。
プログラミング初心者の方やリスキリングを考えている方にぜひ!
開発環境
今回僕の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
チェックを追加すること
str
がnull
でないことを確認してから.length()
メソッドを呼び出すようにしましょう。
if (str != null) {
System.out.println(str.length());
} else {
System.out.println("ヌルじゃん");
}
このようにしてNullPointerExceptionを回避して、というよりnullのものを処理させないようにしましょう。
最後に
この記事では、プログラミングをやり始めた初心者から実際にエンジニアとして働いた時の実務のコーディング中に発生したエラーやバグの調査方法から対処法、基礎的な知識をできる限りさっくりとわかりやすく解説しています。
その他
現役エンジニアの僕が教える、
- チャット質問で悩み解決
- 週一で1 on 1メンタリング実施あり
- 実務レベルの高難易度課題 & レビューあり
- あなた専用のロードマップを一緒に作成
- 案件や実務のエンジニアのリアルが学べる & 体験できる
- 未経験から4ヶ月で<font color="OrangeRed">フルスタックエンジニア</font>を目指せる
こんな内容が学べる・経験できるプログラミングスクールです。
プログラミング初心者の方やリスキリングを考えている方にぜひ!
Discussion