Java NullPointerException错误,生成用户定义类的数组并初始化它
在下面的代码中,有人能说出错误吗Java NullPointerException错误,生成用户定义类的数组并初始化它,java,arrays,nullpointerexception,Java,Arrays,Nullpointerexception,在下面的代码中,有人能说出错误吗 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
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行给出了以下错误:
线程主java.lang.NullPointerException中出现异常
在Enter.mainSorAccToAge.java:13中,java中的对象类型默认为空。对象数组中的元素没有什么不同。确保数组元素在为其字段赋值之前已初始化
for (int i=0; i < p.size(); i++) {
p[i] = new Person();
}
将只使用空值初始化数组,因此必须使用以下值初始化项:
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()
};
您忘记初始化该数组中的任何对象 所以你可以用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;
创建对象数组时,数组中的每个对象都不会初始化。 单个元素将如下所示:
Person example;
显然,示例尚未初始化,所以指针为null,并且没有构造任何对象。要解决此问题,只需初始化p[0],如下所示:
p[0] = new Person();
公共静态无效字符串[]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.
}主要问题是数组已初始化,但数组中的元素尚未初始化 如果将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。而且没有setter,所以您甚至不能执行p[0].setNameabc
每个记录必须按如下方式初始化:
p[0] = new Person(67, "abc");
虽然如果在未初始化的数组元素上执行p[0],仍然会得到NPE
因此,总而言之,必须在创建数组后初始化数组的每个元素
Person p[] = new Person[5];
上面的语句使用空值创建p[]数组
所以在使用p的实例化之前
p[0]=new Person();
像这样,您需要在使用之前初始化数组。我建议不要使用这种样式,这是糟糕的OOP。离题:我建议使用setter方法来分配值,即
p[0]=new Person();