2

我只是一个初学者..我的查询是..我们可以使用引用变量来引用静态成员..但是引用变量包含对象的地址,其中包含类的非静态成员..它是如何工作的?

4

2 回答 2

1

例如,当您引用一个类(不是一个对象)MyLasterGun时,该类的资源将被定位和加载。该类的部分资源是它的变量。实例化类后会实例化非静态变量,但static加载类后会立即实例化变量。考虑这段代码:

public class MyLaserGun
{
    public static String target = "Major Movie Metropolis";
    public Timer countdown;

    public void MyLasterGun()
    {
        countdown = new Timer();
    }
}

public class FortressOfDoom
{
    private String target;

    public void FortressOfDoom()
    {
        target = MyLaserGun.target;

        // To access the timer, an actual instance must be created
        MyLaserGun pewpew = new MyLaserGun();
        pewpew.countdown.cancel();
    }
}

您可以通过调用访问目标,MyLaserGun.target但除非您实例化创建新对象的类,否则您无法访问倒计时。

此外,不要将static可以很好地编辑的static final变量与常量且不能更改的变量混淆。

有关何时初始化静态变量的更多信息,请参阅静态类初始化何时发生?.

更新 考虑更新的示例。

于 2013-09-25T05:58:32.400 回答
0

静态成员意味着它的类属性。其中非静态成员表示对象的属性。

以 Bird 类为例,所以如果我说 canFly = true 是 Bird 类的静态属性。

但是假设现在你只想描述那些不会飞的鸟,那么你可以使用

Bird penguin = new Bird();
penguin.canFly= false;//canFly is static variable.

这意味着现在你只描述那些不能飞的鸟。

然而

penguin.homeTown = coldArea; // is non-static property.
于 2013-09-25T05:57:02.110 回答