我只是一个初学者..我的查询是..我们可以使用引用变量引用静态成员..但引用变量包含对象的地址,该对象包含类的非静态成员。它是如何工作的?
答案 0 :(得分:0)
静态成员表示其类的属性。其中非静态成员表示对象的属性。
以Bird类为例,如果我说canFly = true是Bird类的静态属性。
但是假设现在你想要只描述那些无法飞行的鸟,那么你可以使用
Bird penguin = new Bird();
penguin.canFly= false;//canFly is static variable.
这意味着现在你只能解释那些无法飞行的鸟。
其中
penguin.homeTown = coldArea; // is non-static property.
答案 1 :(得分:0)
当你引用一个类(而不是一个对象)时,例如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
变量混淆,这些变量可以编辑得很好,这些变量是常量且无法更改。
有关何时初始化静态变量的更多信息,请参见When does static class initialization happen?。
<强>更新强> 考虑更新的示例。