-1

次の例外があります。

Exception in thread "main" java.lang.NullPointerException
    at Studentlist.Studentlist(Studentlist.java:79)
    at Studentlist.main(Studentlist.java:38)

38行目:getstudentsprofileへの入力に渡しています。

79行目:私はやっています:

int z= array1.length;

この問題をデバッグする方法。私はたくさんのレコードを読んでいて、この例外を除いて、すべてが1か所でクラッシュしています。これをデバッグする方法は?例外がいつ発生したかをどのように確認できますか?値は何ですか?

実際、私は持っています:

catch (IOException ee)
        {
            ee.printStackTrace();
        }      

しかし、運はありません。

4

8 に答える 8

4

あるように見えますarray1が、そうnullNullPointerExceptionはないIOExceptionので、キャッチする必要があります

catch (NullPointerException npe) {
            npe.printStackTrace();
}

または、そのステートメントに対してこの条件を発生させるコードを与えないで、nullをチェックすることをお勧めします

int z = SOME_DEFAULT_VALUE;
if(arr!=null){
 z = arr.length;
}
于 2012-08-30T06:00:06.823 に答える
3

NullPointer例外はRunTimeExceptionであるため、キャッチしないでください。これは通常、コンパイル時にキャッチされないコードの問題が原因で発生します。詳細については、これらのディスカッションを確認してください。

ヌルポインタ例外をキャッチすることはコードの臭いですか?

nullポインタ例外をキャッチすることが良い習慣ではない場合、例外をキャッチすることは良い習慣ですか?

于 2012-08-30T06:06:47.180 に答える
2

79行目のarray1はnullですがNullPointerException、プログラムのバグを示している可能性が高いため、キャッチしないでください。代わりに、参照が!= null(nullがプログラムで有効な値である場合)かどうかを確認するか、そうでない場合は、たとえば、をスローして、無効な値を提供したことを呼び出し元のコードに通知する必要がありますInvalidArgumentException

if(array1 ! = null) { //if array1 being null is a valid value in a program
    int z= array1.length;
}
//continue with your processing

また

if(array1 ! = null) { //if array1 being null is not a valid value in a program
    throw new IllegalArgumentException("You should pass a not null array for processing");
}
于 2012-08-30T06:07:13.670 に答える
2

array1がnullかどうかを確認します

if(array1 ! = null) { // you should always avoid NPEs

  int z= array1.length;
}

または

catch (IOException | NullPointerException e) // you can multi-catch exceptions, java7 new feature
   e.printStackTrace();
}    

NullPointerExceptionとIOExceptionは異なります。例外については、Javaチュートリアルに従ってください。

于 2012-08-30T06:00:43.190 に答える
2

で処理するだけtry/catchです....条件を使用する必要はありません...if

try{

     int z= array1.length;

 }catch(final IOException|NullPointerException ex){    

          // This Nested catch works with Java 7 and above

 }
于 2012-08-30T06:29:48.447 に答える
1

array1は初期化されていないため、NullPointerExceptionが発生します。

明らかに、それがキャッチブロックに入らIOException ないNullPointerException理由はそれではありません。

Javaプログラムをデバッグするには、デバッグ機能が組み込まれているIDEを使用します。非常に使いやすいNetbeansが見つかります。EclipseやJDeveloperのような他のものにも優れた機能があります。

于 2012-08-30T06:05:43.100 に答える
1

NullPointerExceptionをキャッチしないでください。これは、良い習慣ではありません。むしろ、問題を解決してみてください。プログラミングエラーを修正するために、ランタイム例外が発生します。あなたの場合、array1は初期化されていないため、NULLです。そうすればうまくいくはずです。

于 2012-08-30T06:31:46.530 に答える
1

NullPointerException初期化していないために発生します。array1 つまり、array1はどのメモリ位置も指していません。array1を次のように初期化する必要があります。 int[] arrray1 = new int[size];

于 2012-08-30T06:11:12.590 に答える