数组类的空指针异常

时间:2014-03-13 14:30:20

标签: java exception object printing null

每次当我创建一个类和其他类将是一个数组,我将存储第一个类对象并调用一个方法时,我会收到一个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主动,我也会收到同样的错误。

我做错了什么?

2 个答案:

答案 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(){...}