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 楼答案
你的描述不太清楚。但在Turtle构造函数中,将w作为参数。因此,当参数不为null时,就没有NPE
但从未设置实例变量w。所以当你调用getX时,你会得到一个NPE,因为w从来没有设置过
所以,也许你可以简单地添加一个
在Turtle构造函数中设置实例变量。然后设置w,w.getX()将不会抛出NPE