Kum*_*tra 38
1.实例变量是每个Object一个,每个对象都有自己的实例变量副本.
例如:
public class Test{
int x = 5;
}
Test t1 = new Test();
Test t2 = new Test();
Run Code Online (Sandbox Code Playgroud)
双方t1并t2会拥有自己的副本 x.
2.静态变量是每个类一个,该类别共享相同的静态变量的每一个对象.
例如:
public class Test{
public static int x = 5;
}
Test t1 = new Test();
Test t2 = new Test();
Run Code Online (Sandbox Code Playgroud)
无论t1和t2将有只有一个X在它们之间共享.
3.当JVM加载类时,将初始化静态变量.
4. A static method 无法访问Non-static变量或方法.
5. Static methods同时Static variables可以模仿 a Singleton Pattern,但它不是正确的方式,因为当有很多类时,我们无法确定JVM的类加载顺序,这可能会产生问题.
如果你有太多的静态函数和变量,它可能会导致更多的功能方法而不是真正的 OO。此外,如果您有公共静态变量,那么您将复制不好的全局变量。跟踪他们是一场噩梦。
一般来说,我的规则是使用实例变量,如果可以,并且只有静态变量和函数,如果它真的是类而不是对象的泛型
这是对类似问题Java: when to use static methods 的一个很好的回答
与其仅仅链接到方法,不如考虑使用 new 操作来创建一个新对象并以非静态方式从该对象访问该方法。
前
public void myMethod(){
Time.setTime(Time.getTime() + 20);
System.out.println(Time.getTime());
}
Run Code Online (Sandbox Code Playgroud)
后
public void myMethod(){
Time t = new Time();
t.setTime(t.getTime() + 20);
System.out.println(t.getTime());
}
Run Code Online (Sandbox Code Playgroud)
这些方法中保存的任何状态现在都将是您创建的时间实例。如果需要,您还可以在其他方法中共享变量 t。
| 归档时间: |
|
| 查看次数: |
59986 次 |
| 最近记录: |