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;
}
所以,我有这个 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;
}