Java で NullPointerException はどのように生成されるのでしょうか?

WBOY
リリース: 2023-06-24 23:45:41
オリジナル
1516 人が閲覧しました

Java は厳密に型指定された言語であり、使用前に変数を明示的に初期化する必要があります。変数が初期化されておらず、値が割り当てられていない場合、または変数が null オブジェクトを参照している場合、実行時に NullPointerException がスローされます。この種の例外は Java プログラムで頻繁に発生するため、例外がどのように発生するのか、またその回避方法をよく理解する必要があります。

Java では、NullPointerException は通常、次の状況によって発生します。

  1. オブジェクトが初期化されていないか、破棄されている
    プログラムが、次のような状況でオブジェクトにアクセスしようとしたとき。初期化されていない場合、またはオブジェクトが破棄されている場合、Java 仮想マシンは NullPointerException 例外をスローします。例:
String str;
System.out.println(str.length());
ログイン後にコピー

この例では、変数 str は初期化されておらず、値も割り当てられていないため、その length() メソッドにアクセスすると NullPointerException がスローされます。

  1. 空のオブジェクトを参照します
    Java では、任意のオブジェクトを null に設定できます。プログラムが null オブジェクトのプロパティまたはメソッドにアクセスしようとすると、NullPointerException がスローされます。例:
String str = null;
System.out.println(str.length());
ログイン後にコピー

この例では、変数 str に null 値が割り当てられているため、その length() メソッドにアクセスすると NullPointerException がスローされます。

  1. 境界外の配列アクセス
    プログラムが存在しない配列にアクセスしようとすると、ArrayIndexOutOfBoundsException 例外がスローされます。例:
int[] arr = new int[3];
System.out.println(arr[3]);
ログイン後にコピー

この例では、arr 配列には 3 つの要素しかなく、プログラムが 4 番目の要素にアクセスしようとすると ArrayIndexOutOfBoundsException 例外がスローされます。この配列がオブジェクト配列の場合、配列内のオブジェクトのプロパティまたはメソッドにアクセスすると、NullPointerException が発生する可能性があります。

NullPointerException を回避するにはどうすればよいですか?

NullPointerException を回避する最善の方法は、変数を使用する前に明示的に初期化して割り当て、プログラム内で null オブジェクトを参照しないようにすることです。これは、Java 8 の if ステートメントまたは Optional クラスを使用して実現できます。

String str = null;
if(str != null) {
    System.out.println(str.length());
}

String str2 = Optional.ofNullable(str).orElse("");
System.out.println(str2.length());
ログイン後にコピー

この例では、if ステートメントは str が null オブジェクトかどうかを判断するために使用され、Optional クラスは、str が null オブジェクトであることを回避するために使用されます。 null オブジェクトを参照しています。

つまり、NullPointerException は、Java 開発において非常に一般的な例外の 1 つです。通常、オブジェクトが初期化されていない場合、または null オブジェクトを参照している場合に発生します。この例外を回避するには、使用前に変数を初期化し、プログラム内で空のオブジェクトを参照しないようにする必要があります。

以上がJava で NullPointerException はどのように生成されるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート