Java的新手 - 为什么这不编译?

alb*_*oss 2 java arrays

现在用这个撕掉我的头发.这是我在Java中的第二个程序,我试图将一个简单的Dog类扩展为Dog类的数组.我看不出这有什么问题,但我得到的错误是:

Exception in thread "main" java.lang.NullPointerException
    at Dogprint.main(Dogprint.java:5)
Run Code Online (Sandbox Code Playgroud)
public class Dogprint {
    public static void main(String[] args) {
        Dog[] dog1 = new Dog[2];

        dog1[0].setbreed("poodle");
        dog1[0].setsize(2);
        dog1[1].setbreed("Alsation");
        dog1[1].setsize(5);

        for (int i = 0; i < 2; i ++) {
            System.out.println(dog1[i].getsize());
            System.out.println(dog1[i].getbreed());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
class Dog {
    private int size;
    private String breed;

    public void setbreed(String breed) {
        this.breed = breed;
    }

    public void setsize(int size) {
        this.size = size;
    }

    public int getsize() {
        return size;
    }

    public String getbreed() {
        return breed;
    }
}
Run Code Online (Sandbox Code Playgroud)

rge*_*man 6

您创建了一个Dogs 数组,但是没有创建Dog要进入数组的对象.Java将所有元素初始化为null.通过使用显式初始化元素new Dog().

Dog[] dog1 = new Dog[2];

dog1[0] = new Dog();
dog1[0].setbreed("poodle");
dog1[0].setsize(2);
dog1[1] = new Dog();
dog1[1].setbreed("Alsation");
dog1[1].setsize(5);
Run Code Online (Sandbox Code Playgroud)