【Java入門】NullPointerExceptionとその回避方法

50種類以上のIT教材を無料で使える!
0円から学習できるオンラインITスクール「侍テラコヤ」
→さっそく登録する

こんにちは!フリーランスの長野です。

nullって処理していますか?null処理を行わなければ、NullPointerExceptionの例外が発生してプログラムが途中で止まってしまうことがよくあります。

そこでこの記事では、NullPointerExceptionについて

  • NullPointerExceptionとは?
  • NullPointerExceptionの回避方法
  • Optionalを使う方法

など基本的な内容から、応用的な内容についても解説していきます。

今回はNullPointerExceptionについて、わかりやすく解説します!

なお、Javaの記事については、こちらにまとめています。

NullPointerExceptionとは?

NullPointerExceptionとは、null値の参照型変数を参照しようとした時に発生する例外です。

そもそもnullとは?

そもそもnullとは何か簡単におさらいしましょう。

nullとは参照型変数の値が定義されていない状態です。

参照型変数の値は参照するメモリ上のアドレスとその参照先の値を示します。

この参照するメモリ上のアドレスとその参照先の値が定義されていない場合、参照型変数の値はnullとなります。ですのでnullからはどんなメソッドも呼び出すことができません。

もしnullでメソッドを実行させようとしてすると、NullPointerExceptionの例外が発生します。

サンプルコードで確認しましょう。

public class NullPointerExceptionSample {
    public static void main(String[] args) {
        String str = null;
        System.out.println(str.length());
    }
}

実行結果:

Exception in thread "main" java.lang.NullPointerException
    at NullPointerExceptionSample.main(NullPointerExceptionSample.java:4)

【何から学べばいいかわからない…そんな悩みを解決します!】

完全無料ですぐわかる「プログラミング学習プラン診断」

・適性にあわせて学習プランを診断
・完全無料で気軽に診断できる
・学習の悩みもまるっと解決

さっそく診断してみる

NullPointerExceptionの回避方法

さきほどのサンプルコードのようにnullからメソッドを呼び出したり、nullが許容されていないメソッドの引数にnull値の参照型変数を指定するとNullPointerExceptionの例外が発生して、プログラムが途中で止まる不具合が発生します。

それを回避する方法として参照型変数がnullかどうかif文を使って判定する方法がよく使われます。

サンプルコードで確認しましょう。

public class NullPointerExceptionSample {
    public static void main(String[] args) {
        String str = null;
        try {
            if(str != null) {
                System.out.println(str.length());
            } else {
                throw new NullPointerException();
            } 
        } catch(NullPointerException e) {
            e.printStackTrace();
        }
    }
}

実行結果:

java.lang.NullPointerException
    at NullPointerExceptionSample.main(NullPointerExceptionSample.java:8)

このサンプルコードでは、if文を使ってString型の参照型変数strがnullでない場合はstrからlengthメソッドを呼び出しstrの文字数を表示するようになっています。

そしてnullの場合はNullPointerExceptionの例外を発生させ、try-catch文でその例外を捕捉するようにしています。

try-catch文でthrowを使って例外を発生させる方法についてはこちらで詳しく解説していますので、ぜひ参考にしてください。

【納得Java】try-catch文のthrowとthrowsの使い分け
更新日:2023年3月21日

Optionalを使う方法

さきほどのサンプルコードのように参照型変数がnullかどうかif文を使って判定しました。

しかし、Java8からはOptionalクラスを使って記述することもできるようになりました。

String str = null;
Optional<String> value = Optional.ofNullable(str);

Optionalについてはこちらで詳しく解説していますので、ぜひ参考にしてください。

JavaのOptionaとは?使い方をパターン別にわかりやすく解説
更新日:2023年3月21日

【なかなかエラーが解決できない…そんな悩みを解決します!】

登録無料で始められるプログラミングスクール「侍テラコヤ」

・回答率100%のQ&A掲示板でエラーを解決!
現役エンジニアとのオンライン相談で悩みを解決!
・50種類以上の教材で複数言語を習得!

侍テラコヤについて詳しく見る

まとめ

ここでは、NullPointerExceptionについて説明しました。

文字列や配列、リストなどの参照型変数はNullPointerExceptionの例外に対して、if文やOptionalクラスを用いて処理を記述する必要があります。

慣れて使いこなせることができるように、この記事を何度も参考にして下さいね!

プログラミング学習中、
誰かへ相談したいことはありませんか?

SAMURAI TERAKOYA

プログラミングはエラーの連続。作業を進めるなかで誰かに教えてほしい場面は多いですよね。

そんな悩みを解決できるのが、侍テラコヤです。登録無料で始められて、現役エンジニアとオンラインで相談できるほか、回答率100%のQA掲示版でプログラミングに関する悩みを解決します!

気になる方はぜひ詳細をご覧ください。

→侍テラコヤの詳細をみる

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
info@sss-lab.com

あなたの目的に合わせた
SAMURAI ENGINEERの運営サービス

SAMURAI ENGINEER Pro

未経験でも挫折しないプログラミングスクール

詳細はこちら

SAMURAI TERAKOYA

日本最大級のサブスク型オンラインITスクール

詳細はこちら

SAMURAI ENGINEER Freelance

「一人で稼げる」スキルを身につける

詳細はこちら
Close