Java
 Computer >> コンピューター >  >> プログラミング >> Java

java.lang.NullPointerExceptionエラーを解決する方法

Javaベースのアプリケーションで作業したことがある場合は、NullPointerExceptionと呼ばれるものに遭遇したはずです。 Null Pointer Exceptionは、Javaアプリケーション開発で最も一般的なエラーの1つです。この例外は通常、人為的エラーの結果ですが、このようなエラーのデバッグに時間が浪費される可能性があります。この問題は完全に構文エラーではないため、問題を特定するのが難しい場合があります。

この記事では、java.lang.NullPointerExceptionとは何か、なぜ発生するのか、どのように修正できるのか、ワイルドnullポインターに遭遇しないようにするために従うべきベストプラクティスのいくつかを見ていきます。面倒なことはせずに始めましょう。

java.lang.NullPointerExceptionとは何ですか?

Null Pointer Exceptionは、Java言語でサポートされているいくつかの例外の1つです。これは、現在nullを指している参照変数にアクセスしようとしたことを示しています。

Nullは、宣言後または宣言時にユーザーによって初期化されない変数に割り当てられるJavaのデフォルト値です。次のような変数を宣言する次の例を考えてみましょう。

String str;

次に、変数の内容を出力してみます。

System.out.println(str);
// => null

上記のように、「null」が出力に出力されます。これは、変数strが初期化されていないため、現在nullを指しているか、値を保持していることを示しています。ヌルポインティング変数がもたらす問題は、変数が単なる参照であり、何も指さないということです。ヌルポインティング変数に格納されているデータに対していくつかの操作を実行しようとすると、システムは何をすべきかわかりません。これは、変数に実際に格納されているデータがないために発生します。無効なエンティティを指します。

java.lang.NullPointer.Exceptionの例

java.lang.NullPointerExceptionの例を探すことは難しい作業ではありません。必要なのは、変数にアクセスする前に変数を初期化することだけではないからです。たとえば、StringBuilderクラスについて考えてみましょう。 StringBuilderは、文字列の形成と操作を処理するために使用されるクラスです。通常、クラスを使用して文字列を作成する方法は次のとおりです。

import java.util.StringBuilder;

public class Test {
  public static void main(String[] args) {
    StringBuilder sb = new StringBuilder();

    sb.append("Hello ");
    sb.append("World!");
   
    String result = sb.toString();

    System.out.println(result);
    // => Hello World!
  }
}

上記のスニペットを実行すると、問題なく動作します。 nullポインタ例外をスローする変更バージョンを見てみましょう。

参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。

平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。

import java.util.StringBuilder;

public class Test {
  public static void main(String[] args) {
    StringBuilder sb;

    sb.append("Hello ");
    sb.append("World!");
   
    String result = sb.toString();

    System.out.println(result);
  }
}

ご覧のとおり、StringBuilderクラスのインスタンスを宣言中に初期化しませんでした。 sb.append()の場合 行が実行され、sbは実際にはオブジェクトを指していません。むしろ、nullを指します。これは、NullPointerExceptionがスローされる場所です。例外がスローされるため、JVMはこの後ステートメントを実行できません。

java.lang.NullPointerExceptionエラーを修正する方法

Null Pointer Exceptionの作成は簡単ですが、回避または修正するのは難しいです。一部の統合開発環境(IDE)は、互換性のある値で変数を初期化する前に変数にアクセスしている場合に警告しますが、ほとんどのIDEは、変数を複数のメソッド呼び出しに渡す場合など、複雑な状況ではこれを理解できません。 Null Pointer Exceptionの正確な修正は、状況とコードによって異なります。一般的なNullポインタシナリオを修正するための主な方法のいくつかを次に示します。

手動エラーがないかコードを確認する

Null Pointer Exceptionsが発生する最大の理由は、人為的エラーです。作成したプログラムに、最初に意図した正しいロジックが含まれていることを確認してください。また、ソースコードに目を通し、ステートメントを見逃していないか、変数のスペルを間違えて、一部の変数に値が割り当てられていないかどうかを確認します。

ロジックが指示する方法でコードを記述していること、およびステートメントの記述を見逃していないこと、またはオブジェクトを間違った参照に割り当てていないことを確認してください。経験則として、変数を使用する前に、オブジェクトで初期化されていることを確認してください。

ヌルポインタ例外を引き起こす可能性のあるコードの周りに安全性チェックを配置する

NullPointerの原因となっているコード行がわかっていて、ロジックも正しいと思われる場合は、コードのセクションをtry-catchブロックでラップし、NullPointerがキャッチされたときの動作を定義できます。このような設定は次のようになります。

...
// Some code above

try {
  // Put the exception-prone code here
} catch (NullPointerException npe) {
  // Define what needs to be done when an NPE is caught
}

// Some code below
...

これは、特定の参照変数にnullが含まれる場合と含まれない場合がある状況で発生します。多くの場合、リモートAPI応答、デバイスインターフェイス応答はこのシナリオになりがちです。結果またはハードウェアの可用性に応じて、応答変数はインスタンス化されたオブジェクトを指す場合とそうでない場合があります。安全チェックの使用は、これらの状況を処理するのに最適です。

何かにアクセスする前にヌルをチェックする

この方法は、try-catch方法に似ています。このメソッドでは、「if」ブロックを使用して、変数にアクセスする前にnull値をチェックします。エラーをキャッチするために「if」ブロックが使用された場合、前のコードスニペットは次のようになります。

...
// Some code above

If (myVar !== null ) {
  // Put the success logic here
} else {
  // Handle null value here
}

// Some code below
...

2つの方法の最大の違いは、実行するチェックの範囲です。 ifメソッドはmyVar変数のnull値のみをチェックしますが、try-catchブロックはnullであるすべての変数をキャッチします。

これにより、「if」ブロックは、アプリケーションロジックでnullポインタに対応するためのより的を絞ったクリーンなアプローチになります。ただし、nullになる可能性のある変数が複数ある場合は、簡単にするためにtry-catchブロックを使用することをお勧めします。

結論

この記事では、JavaでのNull Pointer Exceptionとは何か、およびこのエラーがどのように発生するかについて説明しました。また、実際の状況でNullポインターがどのように作成されるかを理解するために、Nullポインター例外を引き起こすコードも調べました。最後に、Null Pointer Exceptionを修正するための主要な方法のいくつかを特定し、NPEを修正する2つの方法を対比して議論を終了しました。

Javaプログラムの作成を検討している場合、Null Pointer Exceptionは、修正方法を知っておく必要のある重要なバグの1つです。この例外は最も頻繁に発生する問題の1つであり、コードの構文やセマンティクスとは関係ありません。これにより、例外を特定して修正するのが最も難しい問題の1つになります。この記事のような問題を修正するためのクイックリファレンスは、あなたの経験をよりスムーズにするためにバインドされています。


  1. Netflix サイト エラー:このエラーの解決方法

    Netflixは、コロナウイルスの発生が発生する前から、「社会的距離」に従うように勧めてくれた、私たちのこれまでにないお気に入りの仲間です.はい、ここで正直に言わなければなりません!そして特に今、この自己検疫段階で、Netflixはこれらの困難な時期に私たちを楽しませ続けるためにかなり良い仕事をしています. Netflix でお気に入りのテレビ番組を一気に見ることほど楽しいことはありませんよね?退屈しているかどうかにかかわらず、Netflix は私たちの行き先です。 名声について言えば、Netflix は間違いなくオンライン ストリーミング サービス セグメントに革命をもたらしました。 N

  2. ERR_NETWORK_CHANGED Chrome エラーの解決方法

    Windows 10 ユーザーが直面する一般的な問題の 1 つは、ERR_NETWORK_CHANGED Chrome エラーです。メッセージが明確に示すように、このエラーは、インターネット接続またはブラウザーがページの読み込みを許可していない場合に発生します。これは、Chrome を使用している場合、どのページにもアクセスできないことを意味します。 これに加えて、「ネットワークにアクセスできません ERR_NETWORK_CHANGED」、または URL を確認すると、接続が中断されました。 悲しいことに、Windows 10 でこれらのエラー メッセージのいずれかに直面