Java 在定义变量之前访问变量时出现问题

Java 在定义变量之前访问变量时出现问题,java,initialization,Java,Initialization,我有这个: public class Sprite { protected float x; protected float y; protected Image image; protected Rectangle boundingBox; public Rectangle getBoundingBox() { boundingBox = new Rectangle(x, y, im

我有这个:

public class Sprite

{
    protected float x;
    protected float y;
    protected Image image;
    protected Rectangle boundingBox;


    public Rectangle getBoundingBox()
    {
         boundingBox = new Rectangle(x, y,
                    image.getWidth(), image.getHeight());
        return boundingBox;
    }
然而,当我运行它时,我会得到一个空指针异常。类sprite从不单独使用,只用作超类

定义映像的唯一方法是通过构造函数:

Sprite(float x, float y, Image image) {
    this.x = x;
    this.y = y;
    this.image = image;
}

可能是因为变量映像从未初始化。因此,image.getWidth和image.getHeight将因NullPointerException而失败。或者初始化变量。或者在尝试使用之前传入映像或检查null。

可能是因为变量映像从未初始化。因此,image.getWidth和image.getHeight将因NullPointerException而失败。或者初始化变量。或者在尝试使用图像之前传入图像或检查空值。

由于图像尚未初始化,您将获得一个NullPointerException

编辑:

类sprite从不单独使用,只用作超类。 定义映像的唯一方法是通过构造函数:

Sprite(float x, float y, Image image) {
    this.x = x;
    this.y = y;
    this.image = image;
}
我不确定我是否理解你对使用构造函数的厌恶。如果Sprite被用作一个超类,那么它的使用就像它自己使用一样多——所以它需要完全烘焙。

因为图像还没有初始化,所以会出现NullPointerException

protected Image image;
编辑:

类sprite从不单独使用,只用作超类。 定义映像的唯一方法是通过构造函数:

Sprite(float x, float y, Image image) {
    this.x = x;
    this.y = y;
    this.image = image;
}
我不确定我是否理解你对使用构造函数的厌恶。如果Sprite被用作超类,那么它的使用就像它自己使用一样多,所以它需要完全烘焙

protected Image image;
如果要获取其宽度和高度,则需要初始化


如果要获取其宽度和高度,则需要初始化。

在何处获得空指针?请发布错误消息本身,或者至少向我们显示产生错误的行。您的代码示例甚至不包括在理论上会实例化实例的地方调用该实例的代码。如果Sprite只是作为一个超类使用,你必须告诉我们子类中哪一行抛出了错误。你在哪里得到一个空指针?请发布错误消息本身,或者至少向我们显示产生错误的行。您的代码示例甚至不包括在理论上会实例化实例的地方调用该实例的代码。如果Sprite只是用作超类,你必须告诉我们子类中哪一行抛出了错误。是的,但是初始化它的唯一方法是通过构造函数。然后在尝试使用它之前进行null检查,然后适当地处理延迟加载到默认值或引发异常等。如果你让null成为偶然,它们就会发生。是的,但初始化它的唯一方法是通过构造函数。然后在尝试使用它之前进行null检查,然后适当地处理延迟加载到默认值或引发异常等。如果您将null留空,则会发生这种情况。