数组类别的NULL指针异常



每次我上课和其他类时,它将成为一个数组,我将存储第一类对象,然后调用方法,我会收到一个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个元素。

相关内容

  • 没有找到相关文章

最新更新