每次当我创建一个类和其他类将是一个数组,我将存储第一个类对象并调用一个方法时,我会收到一个nullPointerEception ..
例如:
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]
不为空,因为我在主file(p=new person("Maxim",17),pl.add(p)).
启动
即使我像Main p[0]=.....,p[1]=...
那样从Main主动,我也会收到同样的错误。
我做错了什么?
答案 0 :(得分:2)
person[] pl = new person[10];
将创建一个 length 10的数组,其中所有元素都为null。
因此,如果您不初始化所有10个元素,则print()
方法最终会抛出NullPointerException。
您似乎只调用add(p)
一次,即您只将索引0处的元素初始化为非空值,因此当j
达到值/索引1时,person[j]
为空。
要解决此问题,您应该将循环更改为for(int j=0;j<i;j++)
,假设print()
是类personList
的方法(您的帖子格式化很难确定)。
一些附注:
请检查Java编码约定并坚持使用它们,因为这样可以让其他人更容易阅读您的代码(它甚至可能会帮助您)。至少坚持类名称的惯例,这应该是驼峰式的,并以大写字母开头,例如PersonList
不是personList
。
而不是使用数组和计数器,例如Person[]
和i
,最好使用列表或其他一些集合,例如List<Person>
。这样,循环可以变为for( Person p : pl) { p.print() }
,并且您也不会限制为10个元素。
答案 1 :(得分:2)
错误在这一行:
person[] pl = new person[10];
您需要初始化数组中的每个Person对象。
for(int i = 0; i < pl.length; i++)
{
pl[i] = new Person();
}
你的Person构造函数也是错误的。它应该是
public Person(){...}
不
public Class(){...}