1

次のコードを読んでいて、NSEE に出会いました。どういう意味ですか?次のコード ブロックは何を説明しようとしていますか?

public static void objectArrayExamples()
{
Dog[] dogList = new Dog[10];
// How many Dog objects now exist?
dogList[5].bark(5); //uh oh! NSEE
for(int i = 0; i < dogList.length; i++)
{
dogList[i] = new Dog();
}
dogList[3].setName(“Bowzer”);
}
4

6 に答える 6

4

私が推測するコンテキストから、NoSuchElementExceptionそれはこの状況で得られるものではありませんNullPointerException.Javaでは、非プリミティブ型の新しい配列がnullで満たされているため、実際に得られます.

于 2012-10-29T16:43:34.160 に答える
2

NSEEの略ですNoSuchElementExceptionが、例が間違っていますNullPointerException

それが実証しようとしているのは良い質問です.配列自体の初期化とその配列の要素の初期化の違いを実証しようとしていると思います.

レッスンはnew Dog[10]実際にはオブジェクトを作成しないDogため、コメントの質問に対する答えは「なし」です。new Dog[10]オブジェクトを保持できる、10 要素の長さの空の配列のみを作成しDogます。

于 2012-10-29T16:45:22.080 に答える
1

NoSuchElementExceptionの可能性があります。配列にデータを入力したことがないため、ここのコードで NullPointerException が発生します。

dogList[5].bark(5); //uh oh! NSEE
于 2012-10-29T16:42:50.253 に答える
0

NullPointerException配列を作成したが、それを埋めていないため、NPE - here が表示されます。配列には null 要素のみが含まれています。要素 #5 のメソッドにアクセスしようとすると、要素が null であるため NPE が発生します。

最初に要素を初期化する必要があります。

dogList[5] = new Dog();

于 2012-10-29T16:46:03.433 に答える
0

配列を として宣言しているだけで、配列にデータを入力しDog[] dogList = new Dog[10];ていないため、そのような要素がないことを示すNullPointerException取得/使用 ( ) で例外が発生するはずです。dogList[5].bark(5);

配列が作成されたら下に移動dogList[5].bark(5);すると、次のようにうまくいくはずです。

    Dog[] dogList = new Dog[10];
    for(int i = 0; i < dogList.length; i++)
    {
      dogList[i] = new Dog(); //<- Your array is populated here
    }
    dogList[5].bark(5); //<-- Your statement can be moved here
    dogList[3].setName(“Bowzer”);
于 2012-10-29T16:46:22.147 に答える
0

NoSuchElementExceptionは API からの例外であり、Enumeration表示されたコードにはトレースがありません。メソッドbarkがこの API を使用している可能性がありますが、投稿したコードからそれを判断することは不可能です。

もちろん、あなたが示したのが例外が発生するはずのリテラルコードである場合Dog、メソッドを呼び出すインスタンスがないため、コードの一部が例外を生成できない可能性があるため、ステートメントは単に偽barkです。このコードは確実にNullPointerException.

于 2012-10-29T16:46:36.373 に答える