我尝试编译这个程序,但出现错误,有人可以提供帮助吗?

问题描述 投票:0回答:1

线程“main”中的异常 java.lang.NullPointerException:无法存储到对象数组,因为“this.DogNames”为 null 在 GoldenRetriever.GR(IDemo.java:16) 在 IDemo.main(IDemo.java:26)

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

    void PrintBreed(){System.out.println("Breed: " + DogBreed);}
    void PrintName(){System.out.println("Name(s): " + DogNames);}
    void PrintBoth(){
        System.out.println("Name(s): " + DogNames + "Breed: " + DogBreed);
    }
}

class GoldenRetriever extends Dog{
    public void GR(String... names){
        GoldenRetriever myGR = new GoldenRetriever();
        for(int i=0; i<names.length; i++){
            DogNames[i] = names[i];
        }
        myGR.DogNames = DogNames;
        myGR.DogBreed = "Golden Retriever";
    }
}

public class IDemo{
    public static void main(String[] args){
        var myGoldenRetriever = new GoldenRetriever();
        myGoldenRetriever.GR("Buddy", "Dude");
        myGoldenRetriever.PrintName();
        myGoldenRetriever.PrintBreed();
    }
}
java inheritance error-handling
1个回答
0
投票

您收到 NullPointerException 因为您没有实例化 DogNames 数组

public String[] DogNames = new String[10] // where 10 is the size of your array; 

要显示数组的内容,不要只打印 DogNames,因为它不会显示数组的内容,而是显示类名 + 哈希码,您可以在此处阅读相关信息 java-system-out-println-an-数组

    void PrintName(){System.out.println("Name(s): " + Arrays.toString(DogNames));}
    void PrintBoth(){System.out.println("Name(s): " + Arrays.toString(DogNames) + "Breed: " + DogBreed);}

您可以删除这部分 GoldenRetriever myGR = new GoldenRetriever();因为您正在创建一个新对象并为其赋值,所以在 main 中您不会有这些值

    public void GR(String... names){
    for(int i=0; i<names.length; i++){
        DogNames[i] = names[i];
    }
    DogNames = DogNames;
    DogBreed = "Golden Retriever";
}

其他值得一读的东西 Java 命名约定 / Java 构造函数 进一步改进您的代码

© www.soinside.com 2019 - 2024. All rights reserved.