【问题标题】:NullPointerException when access to array in class访问类中的数组时出现 NullPointerException
【发布时间】:2014-07-02 03:58:17
【问题描述】:

我是这个论坛和 Java 的新手。下面的代码可以编译,但是当我尝试向变量输入值时,我得到 NullPointerException。怎么了?

class output_harm
{
    public int[] timestamp;
    public int[] state;

    public output_harm(){
        timestamp = new int[8];
        state = new int[8];
    }
}

output_harm[][] outputs =  new output_harm[7][6];   

outputs[0][0].state[0] = 0; //java.lang.NullPointerException

【问题讨论】:

  • 数组初始化并不意味着它包含任何值。在这种情况下,数组中的所有值都是null。在访问它之前先填充它。

标签: java android arrays class nullpointerexception


【解决方案1】:

问题 output_harm[][] 输出 = 新的 output_harm[7][6];

这只是为了初始化一个数组。 当您调用构造函数 output_harm() 时,只有它会进行初始化。 状态 = 新的 int[8];这里状态在构造函数中初始化并导致 NullPointerException。

解决方案: 首先你需要为每个output_harm初始化一个对象(如果你需要初始化整个数组)

output_harm[][] outputs =  new output_harm[7][6];   
    for(int i=0;i<7;i++){
        for(int j=0;j<6;j++){
            outputs[i][j] = new output_harm();
        }
    }

    outputs[0][0].state[0] = 1;

【讨论】:

    【解决方案2】:

    在你的队伍中

    output_harm[][] outputs =  new output_harm[7][6];   
    

    你只是初始化了你的数组,这个数组到现在还没有包含任何值。

    然后,你打电话给

    outputs[0][0].state[0] = 0;
    

    这会将您带到NullPointerException

    数组初始化后,它包含默认值(对于您的数组类型 [output_harm],它将是 null)并且您在 null 上调用了一个变量,这会抛出 @987654327 @。

    所以,首先你必须初始化你正在使用的数组索引,在你的情况下,做

    outputs[0][0] = new output_harm();
    

    然后outputs[0][0].state[0] = 0;

    【讨论】:

      【解决方案3】:

      定义数组意味着现在output_harmnot null。但是

      output_harm[][] outputs =  new output_harm[7][6];   
      
      outputs[0][0].state[0] = 0; //java.lang.NullPointerException
      

      正在访问第一个索引 null yet 。所以它将是nullPointerException

      【讨论】:

        【解决方案4】:

        只是一个供您使用的指针。

          output_harm[][] outputs =  new output_harm[7][6];   
          outputs[0][0] =  new output_harm();
          outputs[0][0].state[0] =  0;
          outputs[0][0].state[1] =  1;
        

        【讨论】:

        • 现在可以了。我需要循环创建每个对象还是可以在一行中创建所有对象?
        • 您必须循环创建每个对象。
        【解决方案5】:

        排队

        outputs[0][0].state[0] = 0; //java.lang.NullPointerException
        

        你的outputs[0][0]是null所以你不能对null执行任何操作所以这是NPE的根本原因。

        请确保您在该行之前创建该对象,因此只需像这样粘贴之前:

        outputs[0][0] = new output_harm();

        【讨论】:

        • 调用构造函数需要new关键字。
        【解决方案6】:

        在没有初始化值的情况下执行output_harm[][] outputs = new output_harm[7][6],所有值都将设置为默认值,即null

        你需要添加:

        outputs[0][0]=new output_harm();
        

        那么你可以这样做:

        outputs[0][0].state[0] = 0;
        

        【讨论】:

          猜你喜欢
          • 2012-11-11
          • 1970-01-01
          • 2014-11-17
          • 2011-04-29
          • 1970-01-01
          • 1970-01-01
          • 2011-12-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多