【问题标题】:Null Pointer Exception at Array Class数组类中的空指针异常
【发布时间】:2014-03-13 14:30:20
【问题描述】:

每次当我创建一个类和其他类将成为一个数组时,我将在其中存储第一个类对象并调用一个方法,我会收到一个 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] 对象不为空,因为我在 Main file(p=new person("Maxim",17),pl.add(p)). 中启动

即使我像这样从 Main 初始化 p[0]=.....,p[1]=... 我也会收到相同的错误。

我做错了什么?

【问题讨论】:

  • 不知道为什么会有如此多的反对票。这是许多新的 Java 程序员遇到的相同类型的问题。
  • @mttdbrd 问题可能是缺乏努力。
  • 或许将这一点告诉 OP 比直接投反对票更好?
  • @Thomas,我想可能是这样。但这是一个帮助网站。否决票无济于事。重新格式化、提出问题、给出答案:这对新用户很有帮助。
  • @mttdbrd 确实如此,如果尚未说明,至少应该解释一下否决票。也就是说,我也只能猜测这些反对票背后的原因。

标签: java exception object printing null


【解决方案1】:

错误在这一行:

person[] pl = new person[10];

您需要初始化数组中的每个 Person 对象。

for(int i = 0; i < pl.length; i++)
{
    pl[i] = new Person();

}

您的 Person 构造函数也是错误的。应该是

public Person(){...}

不是

public Class(){...}

【讨论】:

    【解决方案2】:

    person[] pl = new person[10]; 将创建一个 length 10 且所有元素都为 null 的数组。

    因此,如果您不初始化所有 10 个元素,您的 print() 方法最终将抛出 NullPointerException。

    您似乎只调用一次 add(p),即您只将索引 0 处的元素初始化为非空值,因此当 j 达到值/索引 1 时,person[j] 为空。

    要解决此问题,您应该将循环更改为 for(int j=0;j&lt;i;j++),假设 print() 是类 personList 的一个方法(您的帖子格式很难确定)。

    一些旁注:

    • 请检查 Java 编码约定并遵守它们,因为这将使其他人更容易阅读您的代码(甚至可能对您有所帮助)。至少要遵守类名的约定,类名应该是驼峰式并以大写字母开头,例如PersonList 不是 personList

    • 而不是使用数组和计数器,例如Person[]i,最好使用列表或其他集合,例如List&lt;Person&gt;。这样循环就可以变成for( Person p : pl) { p.print() },而且你也不会被限制为10个元素。

    【讨论】:

    • 如何创建元素数量未知的数组?在 C++ 中是动态分配。在 java 中?
    • @user3401592 在 Java 中你会使用一个集合,例如一个List,其中一个实现是ArrayList,如果您在创建集合时不知道元素的数量。如果这样做,您可以将该数字传递给数组构造函数,例如int numElements = 3; int[] a = new int[numElements];.
    猜你喜欢
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多