This question already has answers here:
What is a NullPointerException, and how do I fix it?
                                
                                    (12个答案)
                                
                        
                在11个月前关闭。
            
        

当我在构造函数NullPointerException中调用w.getX()时,为什么没有得到Turtle(...),但是当我在方法getX()中调用它时,却会得到。

我猜这与公共和私人声明有关吗?

public class Turtle {
    int x, y;
    private boolean pen;
    private double rikt;
    private SimpleWindow w;

    public Turtle(SimpleWindow w, int x, int y) {
        w.moveTo(x, y);
        System.out.println(w.getX());
        rikt = Math.PI / 2;
        pen = false;
    }

    public int getX() {
        return w.getX();
    }

    public int getY() {
        return w.getY();
    }

}


主要看起来像这样:

public class TurtleDrawSquare {
     public static void main(String[] args) {
        SimpleWindow w = new SimpleWindow(600, 600, "TurtleDrawSquare");
        Turtle t = new Turtle(w, 300, 300);
        t.penDown();
        for (int i = 0; i < 4; i++) {
            t.forward(100);
            t.left(90);
        }
    }
}

最佳答案

您的描述并不清楚。但是在您的Turtle构造函数中,您将w作为参数。因此,当参数不为null时,则没有NPE。

但是永远不会设置实例变量w。因此,当您调用getX时,您会得到一个NPE,因为从未设置w。

所以也许您只需添加一个

this.w = w;


在您的Turtle构造函数中设置实例变量。然后设置了w,而w.getX()将不会抛出NPE。

关于java - 为什么会出现空指针异常? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56193121/

10-12 02:11