我只是从一本看起来很棒的书中学习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)为什么我不能这么做?
发布于 2012-05-26 11:28:41
在Java语言中,当您创建一个数组时,它会自动填充零值(除非您使用的是原语数组,在这种情况下,数组是用null填充的)。
您要做的是访问一个空值,并尝试获取它的一个字段。您的代码实际上是在执行null.name = "Rover"。将myDogs[0]设置为有效的实例,否则将获得NullPointerException。
您可以在元素中创建一个新的Dog实例,如下所示:
myDogs[0] = new Dog();或者,您可以在创建数组时执行此操作,如下所示:
Dog[] myDogs = {new Dog(), new Dog(), new Dog()};发布于 2012-05-26 11:29:01
这是一个空数组,有三个元素长。就像是连续三个狗舍,里面没有狗。在为Dog命名之前,您必须在每个通道中放置一个Dog:
myDogs[0] = new Dog();
myDogs[0].name = "Rover";对myDogs[1]和myDogs[2]重复上述步骤。
发布于 2012-05-26 11:30:53
您创建了一个Dog类型的数组,但没有将任何Dog对象放入其中。狗是null。
Dog [] myDogs = new Dog[3];
myDogs[0] = new Dog(); // <== This populates the array with a new Dog object
myDogs[0].name = "Rover";https://stackoverflow.com/questions/10763353
复制相似问题