1

優れた本のように見えるものからJavaを学んでいるところですが、例の1つに従って問題が発生しています。次のコードでは、単純なクラスのメンバー変数を使用する手順が明らかに欠落しています。私は何が間違っているのですか?

コードは次のとおりです。

class Dog {
    String name;
    String color;
}

class DogsExample {
    public static void main(String[] args) {

    Dog [] myDogs = new Dog[3];

    myDogs[0].name = "Rover";
    }
}

このプログラムを実行すると、名前メンバー変数に値を割り当てるnullポインター例外が発生します。

$ java DogsExample
Exception in thread "main" java.lang.NullPointerException
    at DogsExample.main(DogsExample.java:11)

なぜ私はこれを行うことができないのですか?

4

3 に答える 3

3

これは空の配列で、3つの要素の長さです。犬がいない、3つの犬小屋が並んでいるようなものです。名前Dogを付ける前に、各犬小屋にを入れる必要があります。Dog

myDogs[0] = new Dog();
myDogs[0].name = "Rover";

myDogs[1]とを繰り返しmyDogs[2]ます。

于 2012-05-26T03:29:00.583 に答える
2

Javaでは、配列を作成すると、値が自動的に入力されnullます(プリミティブの配列を使用している場合を除きます。この場合、配列はゼロで入力されます)。

あなたがしているのは、null値にアクセスし、そのフィールドを取得しようとしていることです。あなたのコードは本質的に実行していnull.name = "Rover"ます。有効なインスタンスに設定myDogs[0]しないと、NullPointerExceptionが発生します。

次のような要素でDogの新しいインスタンスを作成できます。

myDogs[0] = new Dog();

または、次のように、配列を作成するときにそれを行うことができます。

Dog[] myDogs = {new Dog(), new Dog(), new Dog()};
于 2012-05-26T03:28:41.270 に答える
1

Dogタイプの配列を作成しましたが、その中にDogオブジェクトを配置しませんでした。Dog[0]はnullです。

Dog [] myDogs = new Dog[3];

myDogs[0] = new Dog(); // <== This populates the array with a new Dog object

myDogs[0].name = "Rover";
于 2012-05-26T03:30:53.267 に答える