【问题标题】:Java - Array <init> errorJava - 数组 <init> 错误
【发布时间】:2015-03-21 17:03:31
【问题描述】:

所以,我有这个类,它包含另一个类数组,在构造函数中我想让“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;

【问题讨论】:

    标签: java arrays init


    【解决方案1】:

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

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

    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;
    }
    

    【讨论】:

      【解决方案2】:

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

      由于您没有将任何TableRow 对象存储到arr 中,因此当您访问arr[i] 时,它返回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;
      }
      

      【讨论】:

        猜你喜欢
        • 2021-05-24
        • 2019-08-22
        • 2013-05-01
        • 1970-01-01
        • 2021-07-23
        • 2014-07-24
        • 2013-04-02
        • 2015-05-18
        • 1970-01-01
        相关资源
        最近更新 更多