繁体   English   中英

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

[英]Null pointer exception using array of object

我有以下代码:

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

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

默认情况下,对象数组用null s填充,所以你正在做什么

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;

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

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

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

您应该将Record s添加到数组中

Record[] record=new Record[100];

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM