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

时间:2015-02-24 22:13:51

标签: java arrays

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

Exception in thread "main" java.lang.NullPointerException
    at Dogprint.main(Dogprint.java:5)

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());
        }
    }
}

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;
    }
}

1 个答案:

答案 0 :(得分:6)

您创建了一个Dog的数组,但是您没有创建要进入数组的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);