我是Java的新手,试图理解为什么a即使运行3次但仅增加1次,却没有增加。

为什么另外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类均具有自己的该变量副本,该副本被初始化为0(默认情况下)并由构造函数递增为1。

顺便说一句,这里的ClassicSingleton是一个令人误解的名称,因为您的ClassicSingleton.getInstance()在每次调用时都会返回一个新实例。即使在每个调用中返回相同的实例,a仍将包含1(因为这一次您将拥有一个ClassicSingleton实例,因此a只会增加一次)。

哦,如果您希望ClassicSingleton是实际的单身人士,请将getInstance更改为:

public static ClassicSingleton getInstance() {
    if (instance == null) {
        instance = new ClassicSingleton();
    }
    return instance;
}

10-04 12:52