1

我只是从一本看起来很不错的书中学习 java,但是在遵循其中一个示例时遇到了问题。在下面的代码中,我显然错过了使用简单类的成员变量的步骤。我究竟做错了什么?

这是代码:

class Dog {
    String name;
    String color;
}

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

    Dog [] myDogs = new Dog[3];

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

当我运行这个程序时,它会导致一个空指针异常,我为 name 成员变量赋值:

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

为什么我不能这样做?

4

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.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 对象。狗 [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 回答