为什么私有变量即使被调用不止一次也只增加一次
Why private variable only increase one time even its called more than one
我是 java 的新手,我想了解为什么即使 a++
运行了 3 次但只增加了一次,a
也没有增加。
为什么另一个 2 个实例没有做出与第一个实例相同的行为,这是哪个原理做的?
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( );
}
}
a
是一个实例变量,这意味着您在 main 方法中创建的三个 ClassicSingleton
class 中的每一个都有其自己的该变量的副本,该副本被初始化为 0 (默认情况下)并由构造函数递增到 1。
顺便说一句,ClassicSingleton
在这里是一个误导性的名称,因为您的 ClassicSingleton.getInstance()
returns 每次调用都是一个新实例。即使它在每次调用中返回相同的实例,a
仍将包含 1(因为这次您将有一个 ClassicSingleton
实例,因此 a
只会递增一次) .
哦,如果你想让ClassicSingleton
成为一个真正的单身人士,把getInstance
改成:
public static ClassicSingleton getInstance() {
if (instance == null) {
instance = new ClassicSingleton();
}
return instance;
}
有两个原因
a
是一个实例变量,仅 递增一次 - 在构建时
- 您每次调用
getInstance
时都会创建一个新实例,这会用一个新实例替换共享实例。基本上,您错误地实现了经典的单例,而是实现了工厂方法。
要修复单例,请检查 instance
是否为 null,如果是,则只创建一个新实例。
我是 java 的新手,我想了解为什么即使 a++
运行了 3 次但只增加了一次,a
也没有增加。
为什么另一个 2 个实例没有做出与第一个实例相同的行为,这是哪个原理做的?
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( );
}
}
a
是一个实例变量,这意味着您在 main 方法中创建的三个 ClassicSingleton
class 中的每一个都有其自己的该变量的副本,该副本被初始化为 0 (默认情况下)并由构造函数递增到 1。
顺便说一句,ClassicSingleton
在这里是一个误导性的名称,因为您的 ClassicSingleton.getInstance()
returns 每次调用都是一个新实例。即使它在每次调用中返回相同的实例,a
仍将包含 1(因为这次您将有一个 ClassicSingleton
实例,因此 a
只会递增一次) .
哦,如果你想让ClassicSingleton
成为一个真正的单身人士,把getInstance
改成:
public static ClassicSingleton getInstance() {
if (instance == null) {
instance = new ClassicSingleton();
}
return instance;
}
有两个原因
a
是一个实例变量,仅 递增一次 - 在构建时- 您每次调用
getInstance
时都会创建一个新实例,这会用一个新实例替换共享实例。基本上,您错误地实现了经典的单例,而是实现了工厂方法。
要修复单例,请检查 instance
是否为 null,如果是,则只创建一个新实例。