Java 在类中访问数组时出现NullPointerException
我是这个论坛和Java的新手。下面的代码可以编译,但当我尝试为变量输入值时,会得到NullPointerException。怎么了Java 在类中访问数组时出现NullPointerException,java,android,arrays,class,nullpointerexception,Java,Android,Arrays,Class,Nullpointerexception,我是这个论坛和Java的新手。下面的代码可以编译,但当我尝试为变量输入值时,会得到NullPointerException。怎么了 class output_harm { public int[] timestamp; public int[] state; public output_harm(){ timestamp = new int[8]; state = new int[8]; } } output_harm[][]
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
执行
output\u harm[][]输出=新输出\u harm[7][6]
如果不初始化值,所有值都将设置为默认值,即null
您需要添加:
outputs[0][0]=new output_harm();
然后你可以做:
outputs[0][0].state[0] = 0;
一致
outputs[0][0].state[0] = 0; //java.lang.NullPointerException
您的输出[0][0]
为空,因此无法对空执行任何操作,因此这是NPE的根本原因
请确保在该行之前创建该对象,因此只需在以下内容之前粘贴:
outputs[0][0]=新的输出_harm()代码>在您的行中
output_harm[][] outputs = new output_harm[7][6];
您只初始化了数组,该数组到现在为止不包含任何值
在那之后你打电话来了
outputs[0][0].state[0] = 0;
这将导致出现NullPointerException
数组初始化后,它包含默认值(对于您的数组类型[output\u harm
],它将是null
),并且您在null
上调用了一个变量,该变量将抛出NullPointerException
因此,首先您必须初始化您正在使用的数组索引,在您的情况下,您需要这样做
outputs[0][0] = new output_harm();
然后输出[0][0]。状态[0]=0代码>只是一个指针,供您使用
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;
定义数组意味着现在输出\u harm
为非空
。但是
output_harm[][] outputs = new output_harm[7][6];
outputs[0][0].state[0] = 0; //java.lang.NullPointerException
正在访问第一个索引,null
。所以这将是nullPointerException
问题
输出伤害[]输出=新输出伤害[7][6]
这只是初始化一个数组。
当调用构造函数output_harm()时,只有它会进行初始化。
状态=新整数[8];在这里,状态在构造函数中初始化,并导致NullPointerException
解决方案:
首先,需要为每个输出初始化一个对象(如果需要初始化总数组)
output_harm[]outputs=新的output_harm[7][6];
对于(int i=0;iarray初始化并不意味着它包含任何值。在这种情况下,数组中的所有值都是null
。在访问它之前先填充它。调用构造函数需要new
关键字。现在就可以了。我需要在循环中创建每个对象,还是可以在一行中创建所有对象?您必须创建每个对象循环中的对象。
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;