我有以下代码:
private class Record {
float val;
byte year;
}
....
Record[] record=new Record[100];
record[0].year=(byte)12;
我在最后一行得到了例外。 谢谢!
答案 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;
我刚注意到Record
是private
类,这意味着它是内部类。虽然您将能够通过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);