Java - 数组 <init> 错误

Java - Array <init> error

所以,我有这个 class,它包含另一个 class 数组,在构造函数中我想让 "n" 和 "nCod" 等于 0。

public class ITable
{   
TableRow arr[];

class TableRow
{
    long n;
    int nCod;
    ICode cod;

}

ITable()
{
    arr = new TableRow[256];
    for(int i=0;i<256;i++)
    {
        arr[i].n = 0;
        arr[i].nCod = 0;
    }
}
}

当我 运行 它时,Eclipse 控制台告诉我:

java.lang.NullPointerException
at jhuffman.def.ITable.<init>(ITable.java:21)

那一行是:

arr[i].n = 0;

当您使用 new TableRow[256] 创建数组实例时,它的每个元素都被初始化为 null。

因此,每个元素在被访问之前都应该被初始化:

arr = new TableRow[256];
for(int i=0;i<256;i++)
{
    arr[i] = new TableRow (); // add this
    arr[i].n = 0;
    arr[i].nCod = 0;
}

当你创建一个没有初始值的对象数组时,数组中的所有位置都会指向null。因此,例如,arr = new TableRow[3] 会将数组初始化为 [null, null, null].

由于您没有将任何 TableRow 对象存储到 arr 中,当您访问 arr[i] 时,它 returns null 而不是具体对象。如果您尝试访问 null 中的字段,它将导致您观察到的 NullPointerException

您需要做的是创建 TableRow 个实例并将它们放入数组中,然后再尝试访问它们。像这样:

arr = new TableRow[256];
for (int i = 0; i < arr.length; i++) {
    arr[i] = new TableRow();
    arr[i].n = 0;
    arr[i].nCode = 0;
}