有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我会得到一个空指针验证?

为什么当我在构造函数Turtle(...)中调用w.getX()时,我得不到NullPointerException,但当我在方法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);
        }
    }
}

共 (1) 个答案

  1. # 1 楼答案

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

    但从未设置实例变量w。所以当你调用getX时,你会得到一个NPE,因为w从来没有设置过

    所以,也许你可以简单地添加一个

    this.w = w;
    

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