Java 为什么私有变量只增加一倍,甚至它被称为多个变量
我是java新手,我试图理解为什么Java 为什么私有变量只增加一倍,甚至它被称为多个变量,java,class,static-members,Java,Class,Static Members,我是java新手,我试图理解为什么a即使a++运行了3次,但只增加了一次,也没有增加 为什么另外两个实例没有做出和第一个实例相同的行为,是哪个原则做的 a是一个实例变量,这意味着您在主方法中创建的三个ClassicSingleton类中的每一个都有自己的该变量副本,该变量初始化为0(默认情况下),并由构造函数递增为1 顺便说一句,ClassicSingleton在这里是一个误导性的名称,因为您的ClassicSingleton.getInstance()在每次调用时都返回一个新实例。即使在每次
a
即使a++
运行了3次,但只增加了一次,也没有增加
为什么另外两个实例没有做出和第一个实例相同的行为,是哪个原则做的
a
是一个实例变量,这意味着您在主方法中创建的三个ClassicSingleton
类中的每一个都有自己的该变量副本,该变量初始化为0(默认情况下),并由构造函数递增为1
顺便说一句,ClassicSingleton
在这里是一个误导性的名称,因为您的ClassicSingleton.getInstance()
在每次调用时都返回一个新实例。即使在每次调用中返回相同的实例,a
仍将包含1(因为这次您将有一个ClassicSingleton
实例,其中a
将只增加一次)
哦,如果您希望ClassicSingleton
成为实际的singleton,请将getInstance
更改为:
public static ClassicSingleton getInstance() {
if (instance == null) {
instance = new ClassicSingleton();
}
return instance;
}
有两个原因
a
是一个实例变量,在构造时仅递增一次getInstance
,都会创建一个新实例,这将用一个新实例替换共享实例。基本上,您实现了经典的单例错误,而是实现了工厂方法要修复单例,请检查
instance
是否为null,并仅在这种情况下创建一个新实例 基本上,tmp中的a、tmp2和tmp3在这个类的所有实例中都是完全独立的。所以您的单例根本不是单例,请查看本教程,了解检查实例是否为null或null的澄清范围not@Kadinstance
变量应仅保留对单个实例的引用。这就是singleton模式的要点-只创建了类的一个实例。@Eran如果变量在每次创建实例时都获得第一个值,我们如何创建这样的singleton<代码>私有静态ClassicSingleton实例=null代码>链接:@Kad嗯,您有b
变量,它跟踪调用getInstance
的次数。在构造函数中增加一个变量(如a
)在单例类中是没有意义的,因为它只会增加一次。@Eran我不想让单例类名仅保留在示例中
public static ClassicSingleton getInstance() {
if (instance == null) {
instance = new ClassicSingleton();
}
return instance;
}