我只是一个初学者..我的查询是..我们可以使用引用变量来引用静态成员。 但是引用变量包含对象的地址,其中包含类的非静态成员..它是如何工作的?
例如,当您引用一个类(而不是您注意的对象)时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
变量混淆,这些变量是常量且无法更改。
有关何时初始化静态变量的更多信息,请参阅何时进行静态类初始化?。
更新请考虑更新的示例。
静态成员表示其类的属性。 其中非静态成员表示对象的属性。
举一个 Bird 类的例子,所以如果我说 canFly = true 是 Bird 类的静态属性。
但是假设现在您只想描述那些不会飞的鸟,那么您可以使用
Bird penguin = new Bird();
penguin.canFly= false;//canFly is static variable.
这意味着现在你只在描述那些不会飞的鸟。
其中作为
penguin.homeTown = coldArea; // is non-static property.