使用对象数组的空指针异常

时间:2013-11-18 02:02:49

标签: java

我有以下代码:

private class Record {
    float val;
    byte year;
}
....
Record[] record=new Record[100];
record[0].year=(byte)12;

我在最后一行得到了例外。 谢谢!

3 个答案:

答案 0 :(得分:1)

默认情况下,对象数组用null填充,所以你在

中做什么
record[0].year=(byte)12;

实际上是

null.year=(byte)12;

null没有其类,因此它没有year字段。要解决此问题,您需要先使用Record类的新对象填充数组,如

Record[] record = new Record[100];
for (int i = 0; i < record.length; i++)
    record[i] = new Record();

//now you can safely use
record[0].year = (byte)12;

我刚注意到Recordprivate类,这意味着它是内部类。虽然您将能够通过new Record()在非静态方法中创建其实例,以便在static方法中创建它,但您将需要其外部类的第一个实例。在这种情况下,您的代码可能看起来像

OuterClass myOuterClassInstance = new OuterClass();
Record[] record = new Record[100];
for (int i = 0; i < record.length; i++)
    record[i] = myOuterClassInstance.new Record();

//now you can safely use
record[0].year = (byte)12;

答案 1 :(得分:1)

首先需要初始化记录[0]。

Record[] record=new Record[100];
record[0] = new Record();
record[0].year=(byte)12;

这与C / C ++不同。在Java中,对象数组的每个元素都需要初始化。

答案 2 :(得分:1)

您应该将Record添加到数组

Record[] record=new Record[100];

for (int i = 0; i < record.length; i++){
   record[i] = new Record(val, year);
}

这是考虑到你有一个构造函数Record(float val, byte year);