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

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

TechAcademyマガジンは受講者数No.1のオンラインプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。

監修してくれたメンター

長屋雅美

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

今回はJavaで最も多いエラーNullPointerExceptionの解決方法について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。

目次

そもそもJavaについてよく分からないという方は、Javaとは何なのか解説した記事を読むとさらに理解が深まります。

 

田島悠介

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

大石ゆかり

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

田島悠介

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

大石ゆかり

お願いします!

 

Javaの主なエラーに関して

Javaでアプリケーションを作成していざ動かしてみようとした時に、エラーが発生してうまく動かないということがありますよね。

Javaの実行またはデバッグ時のエラーは、大きく分けて以下2つのエラーが発生する可能性があります。

  • コンパイルエラー
  • ランタイムエラー

 

コンパイルエラーはアプリを動かすための前準備で発生するエラーです。

以下の記事に詳しく記載がありますので確認してみましょう。

よくあるエラーも紹介!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()メソッドを実行しようとしている部分です。

 

[PR] Javaプログラミングで挫折しない学習方法を動画で公開中

主なエラーの解決方法

解決方法として、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 + "文字");

    }

  }

}

 

実行結果は以下の通りとなり、NullPointerExceptionの発生を回避することができました。

nullです。

 

執筆してくれたメンター

長屋雅美

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

 

大石ゆかり

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

田島悠介

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

大石ゆかり

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

 

Javaを学習中の方へ

これで解説は終了です、お疲れさまでした。

  • つまずかず「効率的に」学びたい
  • 副業や転職後の「現場で使える」知識やスキルを身につけたい

プログラミングを学習していて、このように思ったことはありませんか?

テックアカデミーのJavaコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。

合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、JavaやServletの技術を使ったWebアプリケーション開発を学べます。

まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。

時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!