Kad*_*Kad 3 java class static-members
我是java的新手,并试图理解为什么a即使a++运行3次也不会增加,但只增加一次.
为什么另外两个实例与第一个实例没有相同的行为,这个原理是做什么的?
https://www.tutorialspoint.com/tpcg.php?p=Y0VNTH
public class ClassicSingleton {
private int a = 0;
static int b = 0;
private static ClassicSingleton instance = null;
private ClassicSingleton() {
a++;
System.out.println(a);
System.out.println("ClassicSingleton() called");
}
public static ClassicSingleton getInstance() {
b++;
System.out.println("b:"+b);
instance = new ClassicSingleton();
return instance;
}
public static void main(String[] args) {
ClassicSingleton tmp = ClassicSingleton.getInstance( );
ClassicSingleton tmp2 = ClassicSingleton.getInstance( );
ClassicSingleton tmp3 = ClassicSingleton.getInstance( );
}
}
Run Code Online (Sandbox Code Playgroud)
a是一个实例变量,这意味着ClassicSingleton您在main方法中创建的三个类中的每一个都有自己的该变量副本,该变量初始化为0(默认情况下)并由构造函数递增为1.
BTW,ClassicSingleton在这里是一个误导性的名称,因为你ClassicSingleton.getInstance()在每次调用时返回一个新实例.即使它在每次调用中返回相同的实例,a仍然会包含1(因为这次你将有一个ClassicSingleton实例,为此a只增加一次).
哦,如果你想ClassicSingleton成为一个真正的单身人士,请getInstance改为:
public static ClassicSingleton getInstance() {
if (instance == null) {
instance = new ClassicSingleton();
}
return instance;
}
Run Code Online (Sandbox Code Playgroud)