每次我上课和其他类时,它将成为一个数组,我将存储第一类对象,然后调用方法,我会收到一个nullpotimentection ..
ex:
public class person {
private String name,int age;
public Class()//constructor
public void print() {
System.out.println(name);
System.out.println(name);
//.........others methods
}
}
public class personList {
person[] pl = new person[10];
int i=0;
public void add(person p) {
pl[i]=p;
i++
}
public void print() {
for(int j=0;j<pl.length;j++)
{
pl[j].print();
}
}
}
错误在这里:pl[j].print();
对象p[j]
不是零,因为我在Main file(p=new person("Maxim",17),pl.add(p)).
即使我像这样的 p[0]=.....,p[1]=...
从main中进行插头,我也会收到相同的错误。
我做错了什么?
错误在此行中:
person[] pl = new person[10];
您需要在数组中初始化每个人对象。
for(int i = 0; i < pl.length; i++)
{
pl[i] = new Person();
}
您的人构造函数也是错误的。应该是
public Person(){...}
不是
public Class(){...}
person[] pl = new person[10];
将创建一个长度 10的数组,所有元素均为null。
因此,如果您不初始化所有10个元素,您的print()
方法最终将抛出NullPoInterException。
您似乎仅调用add(p)
一次,即,您仅在索引0处注射元素到非null值,因此当j
达到value/index 1时, person[j]
will will 为null。
要解决此问题,您应该将循环更改为for(int j=0;j<i;j++)
,假设print()
是一种personList
类的方法(您的帖子格式化使得很难确定)。
一些旁注:
-
请检查Java编码约定并坚持下去,因为这将使其他人更容易阅读您的代码(甚至可能会帮助您)。至少要遵守应该是骆驼盒的班级名称的约定,并以上案字母的形式开始,例如
PersonList
不是personList
。 -
而不是使用数组和计数器,例如
Person[]
和i
,最好使用列表或其他集合,例如List<Person>
。这样,循环可能会变成for( Person p : pl) { p.print() }
,并且您也不仅限于10个元素。