最近读《研磨设计模式》对这段话不太理解: 多个实例的 static变量会共享同一块内存区域。
Java 中 static的特性:
- static 变量在类装载的时候进行初始化。
- 多个实例的 static变量会共享同一块内存区域。
做了个例子验证一下
例子:
class A {
static int num = 1;
private String name;
public String getName(String name) {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show() {
System.out.println("name:" + name + " num:" + num);
}
}
public class Test {
public static void main(String[] args) {
A a = new A();
a.setName("classA");
a.num++;
A b = new A();
b.setName("classB");
a.show();
b.show();
}
}
输出结果:
name:classA num:2
name:classB num:2
反例:
package Singleton;
class A {
int num = 1;
private String name;
public String getName(String name) {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show() {
System.out.println("name:" + name + " num:" + num);
}
}
public class Test {
public static void main(String[] args) {
A a = new A();
a.setName("classA");
a.num++;
A b = new A();
b.setName("classB");
a.show();
b.show();
}
}
输出结果:
name:classA num:2
name:classB num:1
通过例子和反例确实可以证明,Java中多个实例的static变量会共享同一块内存区域,也就是多个对象共享一个类的同一个静态成员变量