Javaで最も多いエラーNullPointerExceptionの解決方法を現役エンジニアが解説【初心者向け】

初心者向けにJavaの主なエラーと解決方法について解説しています。ここではNullPointerExceptionというエラーの内容とその対処法を学びます。サンプルコードで動作を確認しましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Javaの主なエラーと解決方法について解説します。実際にプログラムを書いて説明しているので、ぜひ理解しておきましょう。

 

なお本記事は、TechAcademyのJava講座の内容をもとに作成しています。

 

 

田島悠介

今回は、Javaに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

主なエラーと解決方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

Javaの主なエラーと意味

javaプログラムを実行する中で、最も発生する頻度が高いのがNullPointerExceptionというエラーです。NullPointerExceptionは参照がない値にアクセスしようとした際に発生します。

たとえば下記のようなコードを実行したとします。

public class NullSample {

  public static void main(String[] args) {

    printLength("りんご");

  }

  static void printLength(String str) {

    int i = str.length();

    System.out.println(str + "は" + i + "文字");

  }

}

printLength(String str)メソッドは引数で渡された文字列と、その文字数をコンソール出力します。上記サンプルの場合メインメソッドから”りんご”という引数を与えてメソッドを呼び出しているので
実行結果は

りんごは3文字

となります。

次にメインメソッドで引数をnullとして実行してみます。

public class NullSample {

  public static void main(String[] args) {

    printLength(null);

  }

  static void printLength(String str) {

    int i = str.length();

    System.out.println(str + "は" + i + "文字");

  }

}

こちらのコードは実行時にエラーとなります。コンソールに下記のようなエラーが出ます。

Exception in thread "main" java.lang.NullPointerException
  at poi.NullSample.printLength(NullSample.java:13)
  at poi.NullSample.main(NullSample.java:7)

ここで発生しているのがNullPointerExceptionです。

エラーを見るとjava.lang.NullPointerExceptionの直後に、at poi.NullSample.printLength(NullSample.java:13)と出力されています。

これはNullSample.javaの13行目の処理で当エラーが発生したことを表しています。プログラムでいうと

int i = str.length();

の部分です。nullであるstrオブジェクトのlength()メソッドを実行しようとしている部分です。

 

主なエラーの解決方法

解決方法として、printLength(String str) の処理の中で、引数に対してlength()メソッドを動かす前に
引数がnullでないかどうかのチェックを行います。

チェックしてnullでない場合のみ、length()メソッドを動作させます。コードは下記のようになります。

public class NullSample {

  public static void main(String[] args) {

    printLength(null);

  }

  static void printLength(String str) {

    if (null == str) {
      System.out.println("nullです。");
    } else {
      int i = str.length();

      System.out.println(str + "は" + i + "文字");

    }

  }

}

実行結果は

nullです。

となり、NullPointerExceptionの発生を回避することができました。

 

[PR] Javaで挫折しない学習方法を動画で公開中

監修してくれたメンター

長屋雅美

独立系SIerで7年勤務後、現在はフリーのエンジニアとして自宅をオフィスとして活動しています。
JavaやC♯、shellscriptを用いた開発を主に担当し、TechAcademyではJavaコースを担当しています。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

オンラインのプログラミングスクールTechAcademyでは、Java講座を開催しています。

JavaやServletの技術を使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。