在下面的代码中,任何人都可以告诉错误吗?
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行中它出现以下错误:
线程“main”java.lang.NullPointerException中的异常 在Enter.main(SorAccToAge.java:13)
答案 0 :(得分:5)
Object
类型为null
。 Object数组中的元素也不例外。确保在为其字段分配值之前初始化数组元素
for (int i=0; i < p.size(); i++) {
p[i] = new Person();
}
答案 1 :(得分: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()
};
答案 2 :(得分: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;
答案 3 :(得分:0)
创建对象数组时,不会初始化数组中的每个对象。 单个元素看起来像这样:
Person example;
显然,“example”尚未初始化,因此指针为null,并且没有构造任何对象。要解决这个问题,只需像这样初始化p [0]:
p[0] = new Person();
答案 4 :(得分:0)
public static void main(String [] args){
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.
}
答案 5 :(得分: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。
总而言之,您必须在创建数组后初始化数组的每个元素。
答案 6 :(得分:0)
Person p[] = new Person[5];
上面的语句创建具有空值的p []数组
所以在使用p的实例化之前,比如
p[0]=new Person();
像这样你需要在使用
之前初始化数组