-5

在下面的代码中,谁能告诉错误?

public class Person {
    int age;
    String name;
}

public class Enter {

    public static void main(String[] args) {

        Enter ob = new Enter();
        Person p[] = new Person[5];

        p[0].name = "abc"; //Line 13
        p[0].age = 67;
            //I have initialized the whole array likewise.
    }
}

但在第 13 行,它给出了以下错误:

Enter.main 处的线程“main”java.lang.NullPointerException 中的异常(SorAccToAge.java:13)

4

7 回答 7

5

Object类型null在 Java 中是默认的。Object 数组中的元素也不例外。确保数组的元素在为其字段赋值之前被初始化

for (int i=0; i < p.size(); i++) {
  p[i] = new Person();
}
于 2013-08-19T11:53:48.087 回答
0

您忘记初始化该数组中的任何对象。

所以你可以使用 for 循环来做到这一点,

Person p[] = new Person[5];
for(int i=0; i<p.size(); i++){
  p[i] = new Person();
}

p[0].name = "abc"; //Line 13
p[0].age = 67;

p[1].name = "xyz"; //Line 13
p[1].age = 68;
于 2013-08-19T11:57:30.183 回答
0

创建对象数组时,数组中的每个对象都不会被初始化。单个元素如下所示:

Person example;

显然,“example”还没有被初始化,所以指针是空的,并且没有构造任何对象。要解决这个问题,只需像这样初始化 p[0] :

p[0] = new Person();
于 2013-08-19T11:58:37.037 回答
0

主要问题是您的数组已初始化,但数组中的元素尚未初始化。

如果你让你的Person类不可变,你会更清楚:

public final class Person {
    private final int age;
    private final String name;

    public Person(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }
}

现在您将看到您甚至无法调用p[0].name = "abc". 而且没有二传手,所以你甚至不能做p[0].setName("abc")

每条记录必须像这样初始化:

p[0] = new Person(67, "abc");

尽管如果您p[0].getName()对未初始化的数组元素执行此操作,您仍然会获得 NPE。

所以总而言之,您必须在创建数组后初始化数组的每个元素。

于 2013-08-19T12:04:13.870 回答
0
Person p[] = new Person[5];

上面的语句创建具有空值的 p[] 数组

所以在使用 p 的实例化之前,比如

p[0]=new Person();

像这样你需要在使用之前初始化数组

于 2013-08-19T12:04:46.960 回答
0
Person p[] = new Person[5];

将简单地用空值初始化一个数组,所以你必须用以下方式初始化项目:

Person p[] = new Person[5];

    p[0] = new Person();
    p[1] = new Person();

等等,或者,在一条指令中

Person p[] = new Person[5] = {
  new Person(),new Person(),new Person(),new Person(),new Person()
};
于 2013-08-19T11:56:48.047 回答
0

公共静态无效主要(字符串[]参数){

    Enter ob = new Enter();
    Person p[] = new Person[5];
    for(int i=0;i<5;i++){
       p[i] = new Person();
    }
    p[0].name = "abc"; //Line 13
    p[0].age = 67;
            //I have initialized the whole array likewise.

}

于 2013-08-19T12:00:31.443 回答