运行Java程序触发NullPointerException,请求技术协助
解决Java空指针异常:Cannot store to object array because "this.DogNames" is null
问题根源
- 数组未初始化:
Dog类中的DogNames是引用类型数组,默认值为null,直接通过DogNames[i] = names[i]赋值时,会触发NullPointerException。 - 方法逻辑冗余错误:
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
相关产品推荐
相关产品推荐

