You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:45:30