从对象初始化数组会使NullPointerException

时间:2019-03-09 13:48:27

标签: java arrays object exception nullpointerexception

我想在对象数组中设置一些数据,这里是类A,它导致NullPointerException。为什么?如何解决呢?我的初始化有什么问题?

class A {

    int a;

    public void setA(int a) {
        this.a = a;
    }

public class ObjArry {
public static void main(String[] args) {

    A[] ObjectArray = new A[5];

    ObjectArray[0].setA(10); //Exception occurs in this line
    ObjectArray[1].setA(9);
    ObjectArray[2].setA(8);
    ObjectArray[3].setA(7);
    ObjectArray[4].setA(6);
}

2 个答案:

答案 0 :(得分:2)

在所有其他行上也会发生异常。 默认情况下,新初始化的数组new A[5]为空,即其所有字段均为null。 您首先必须执行以下操作:

ObjectArray[0] = new A();
ObjectArray[1] = new A();
ObjectArray[2] = new A();
ObjectArray[3] = new A();
ObjectArray[4] = new A();

答案 1 :(得分:1)

JLS §10.6指出

  

[...](新创建的 1 )数组的每个组件都初始化为其默认值(第4.12.5节)。

1 该评论是我添加的。)

看着§4.12.5,我们发现

  

对于所有引用类型(第4.3节),默认值为null

因此

A[] ObjectArray = new A[5];

创建一个长度为5的数组,每个单元格包含对null的引用。

所以答案是:之所以发生是因为JLS如此说。