为什么我会得到一个空指针异常?

时间:2019-05-17 20:23:43

标签: java

为什么当我在构造函数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);
        }
    }

1 个答案:

答案 0 :(得分:4)

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

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

所以也许您只需添加一个

this.w = w;
在您的Turtle构造函数内部

设置实例变量。然后设置了w,并且w.getX()不会抛出NPE。