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

运行Java程序触发NullPointerException,请求技术协助

解决Java空指针异常:Cannot store to object array because "this.DogNames" is null

问题根源

  1. 数组未初始化:Dog类中的DogNames是引用类型数组,默认值为null,直接通过DogNames[i] = names[i]赋值时,会触发NullPointerException。
  2. 方法逻辑冗余错误:GoldenRetriever的GR方法中创建了新的myGR对象,但该对象与调用方法的myGoldenRetriever实例无关,赋值操作完全无效,属于冗余逻辑。

修复步骤

  • 初始化数组:在给数组元素赋值前,根据传入参数的长度创建数组实例。
  • 移除冗余对象:直接对当前调用方法的对象(this)进行属性赋值,无需新建GoldenRetriever实例。
  • 优化打印逻辑:原代码直接打印数组会输出内存地址,改为循环遍历输出具体元素。

修正后的完整代码

class Dog {
    public String[] DogNames;
    String DogBreed;

    void PrintBreed() {
        System.out.println("Breed: " + DogBreed);
    }

    void PrintName() {
        System.out.print("Name(s): ");
        for (String name : DogNames) {
            System.out.print(name + " ");
        }
        System.out.println();
    }

    void PrintBoth() {
        System.out.print("Name(s): ");
        for (String name : DogNames) {
            System.out.print(name + " ");
        }
        System.out.println("Breed: " + DogBreed);
    }
}

class GoldenRetriever extends Dog {
    public void GR(String... names) {
        // 初始化数组,分配内存空间
        DogNames = new String[names.length];
        for (int i = 0; i < names.length; i++) {
            DogNames[i] = names[i];
        }
        // 直接给当前实例的品种赋值
        this.DogBreed = "Golden Retriever";
    }
}

public class IDemo {
    public static void main(String[] args) {
        var myGoldenRetriever = new GoldenRetriever();
        myGoldenRetriever.GR("Buddy", "Dude");
        myGoldenRetriever.PrintName();
        myGoldenRetriever.PrintBreed();
    }
}

运行结果

Name(s): Buddy Dude 
Breed: Golden Retriever

内容的提问来源于stack exchange,提问作者arifernan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 05:22:21