首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java类成员构造

Java类成员构造
EN

Stack Overflow用户
提问于 2012-05-26 11:26:52
回答 3查看 109关注 0票数 1

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

代码如下:

代码语言:javascript
复制
class Dog {
    String name;
    String color;
}

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

    Dog [] myDogs = new Dog[3];

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

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

代码语言:javascript
复制
$ java DogsExample
Exception in thread "main" java.lang.NullPointerException
    at DogsExample.main(DogsExample.java:11)

为什么我不能这么做?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-26 11:28:41

在Java语言中,当您创建一个数组时,它会自动填充零值(除非您使用的是原语数组,在这种情况下,数组是用null填充的)。

您要做的是访问一个空值,并尝试获取它的一个字段。您的代码实际上是在执行null.name = "Rover"。将myDogs[0]设置为有效的实例,否则将获得NullPointerException。

您可以在元素中创建一个新的Dog实例,如下所示:

代码语言:javascript
复制
myDogs[0] = new Dog();

或者,您可以在创建数组时执行此操作,如下所示:

代码语言:javascript
复制
Dog[] myDogs = {new Dog(), new Dog(), new Dog()};
票数 2
EN

Stack Overflow用户

发布于 2012-05-26 11:29:01

这是一个空数组,有三个元素长。就像是连续三个狗舍,里面没有狗。在为Dog命名之前,您必须在每个通道中放置一个Dog

代码语言:javascript
复制
myDogs[0] = new Dog();
myDogs[0].name = "Rover";

myDogs[1]myDogs[2]重复上述步骤。

票数 3
EN

Stack Overflow用户

发布于 2012-05-26 11:30:53

您创建了一个Dog类型的数组,但没有将任何Dog对象放入其中。狗是null

代码语言:javascript
复制
Dog [] myDogs = new Dog[3];

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

myDogs[0].name = "Rover";
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10763353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档