Java:内部类构造函数存对象到外部类数组报错,求原因与解决
CarBrand类空指针异常分析与修复
报错原因
你在CarBrand构造函数中写了Model[] models = new Model[4];,这是重新声明了一个局部变量models,并没有给类的成员变量public Model[] models;赋值。因此类的成员变量models始终为null,当Model构造函数尝试向models[curIndex]赋值时,就会触发空指针异常。
你的猜想方向接近,但具体问题是成员变量未初始化,而非对象未创建——CarBrand对象已经成功创建,只是它的models成员变量没有被正确初始化。
能否实现将Model存入models数组?
完全可以,只需要修复构造函数的赋值问题,同时建议添加边界判断避免数组越界。
修复后的代码
public class CarBrand { public String brand; public Model[] models; public int curIndex = 0; public CarBrand(String name) { brand = name; // 去掉局部变量声明,直接给成员变量models初始化 models = new Model[4]; } public class Model { public String modelName; public Model(String name) { modelName = name; // 添加边界判断,防止超过4个车型导致数组越界 if (curIndex < models.length) { models[curIndex] = this; curIndex++; } else { System.out.println("该品牌最多只能添加4个车型"); } } // 可选:重写toString方法,输出车型名称而非对象地址 @Override public String toString() { return modelName; } } }
运行原App类代码,此时会正常输出Legacy(如果重写了toString)或者Model对象的正确引用,不会再触发空指针异常。
内容的提问来源于stack exchange,提问作者stereophonicSound
相关产品推荐
相关产品推荐

