为什么当我在构造函数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);
}
}
}
主要内容如下:
public class SessionWrapper
{
private static SessionWrapper instance;
public static SessionWrapper Instance
{
get { return instance ?? (instance = new SessionWrapper()); }
}
private SessionWrapper()
{
}
public void Destroy()
{
HttpContext.Current.Session.Clear();
HttpContext.Current.Session.Abandon();
FormsAuthentication.SignOut();
}
public UserInfo CurrentUser
{
get
{
return (UserInfo)HttpContext.Current.Session["CurrentUser"];
}
set
{
HttpContext.Current.Session.Add("CurrentUser", value);
}
}
答案 0 :(得分:4)
您的描述并不十分清楚。但是在您的Turtle构造函数中,您将w作为参数。因此,当参数不为null时,则没有NPE。
但是实例变量w从未设置。因此,当您调用getX时,您会得到一个NPE,因为从未设置w。
所以也许您只需添加一个
this.w = w;
在您的Turtle构造函数内部设置实例变量。然后设置了w,并且w.getX()不会抛出NPE。