Java でのヌルポインタ例外とは

Mohammad Irfan 2023年10月12日
  1. Java の NullPointerException とは何ですか
  2. Java で NullPointerException クラスを処理する
  3. Java で NullPointerException クラスを処理する
  4. Java のコマンドライン引数で NullPointerException と遭遇
Java でのヌルポインタ例外とは

このチュートリアルでは、Java null ポインター例外と、それを処理する方法を紹介します。フォローできるサンプルプログラムがいくつか含まれています。

Java では、参照変数のデフォルト値は、メモリ位置を指す null 値ですが、関連する値はありません。プログラマーがこの参照変数を使用して操作を実行しようとすると、null 条件のために null ポインター例外がスローされます。

これは、この例外が発生する可能性があるシナリオですが、この例外は Java で最も発生します。これにより、コードが破損し、異常な実行フローが発生します。次の点により、Java コードで NullPointerException が発生する可能性があります。

  • null オブジェクトのインスタンスメソッドを呼び出します。
  • null オブジェクトのフィールドを変更します。
  • null の長さを配列であるかのように扱います。

この例外を処理するために、Java は java.lang パッケージにあるクラス NullPointerException を提供します。catch ブロックでこのクラスを使用して例外タイプを指定し、それをキャッチしてコードの中断を回避できます。

Java の NullPointerException とは何ですか

NullPointerException クラスを理解するための最も基本的な例は、string オブジェクトを作成してから、toUpperCase() のようなメソッドを適用して文字列を大文字に変換することです。以下の例を見て、string オブジェクトが空であるために例外がスローされることに注意してください。

public class SimpleTesting {
  static String str;
  public static void main(String[] args) {
    String newStr = str.toUpperCase();
    System.out.println(newStr);
  }
}

出力:

Exception in thread "main" java.lang.NullPointerException

Java で NullPointerException クラスを処理する

例外を処理するために、Java は try-catch ブロックを提供します。ここでは、これらのブロックを使用して NullPointerException をキャッチし、プログラムの異常終了を回避できます。以下の例を確認してください。

public class SimpleTesting {
  static String str;
  public static void main(String[] args) {
    try {
      String newStr = str.toUpperCase();
      System.out.println(newStr);
    } catch (NullPointerException e) {
      System.out.println("Null Pointer: " + e.getMessage());
    }
  }
}

出力:

{One=1, Two=2, Three=3}

Java で NullPointerException クラスを処理する

null 参照についてすでに知っている場合は、操作を適用する前に、if-else ブロックを使用して最初に変数を検証できます。この方法は優れたソリューションですが、以前に null 参照を知っている場合にのみ機能します。ここのコードを参照してください:

public class SimpleTesting {
  static String str;
  public static void main(String[] args) {
    if (str != null) {
      String newStr = str.toUpperCase();
      System.out.println(newStr);
    } else
      System.out.println("String is null");
  }
}

出力:

String is null

Java のコマンドライン引数で NullPointerException と遭遇

これは、null ポインタ例外が発生する可能性がある別のシナリオです。main() メソッドの args[] 配列にはコマンドライン引数が含まれており、実行時に引数が指定されていない場合、これは null 参照を指します。その長さを取得すると、NullPointerException が返されます。以下の例を参照してください。

public class SimpleTesting {
  static String[] arr;
  public static void main(String[] args) {
    int length = arr.length;
    System.out.println("Array length : " + length);
  }
}

出力:

Exception in thread "main" java.lang.NullPointerException

関連記事 - Java Exception