我知道关于单例模式有很多问题。但是在这里我想知道关于输出的内容,它也可能涵盖“静态”在 Java 中的工作方式。
public class Singleton {
private static Singleton currentSingleton = new Singleton();
public static Singleton getSingleton() {
return currentSingleton;
}
private Singleton() {
System.out.println("Singleton private constructor...");
}
public static void main(String[] args) {
System.out.println("Main method...");
}
}
这是运行代码的输出...
单例私有构造函数...
主要方法...
当我调试这段代码时,控制首先进入
System.out.println("Singleton private constructor...")
并打印。(此时私有静态变量currentSingleton仍为null)
然后进入line
private static Singleton currentSingleton = new Singleton();
,然后初始化私有变量。最后,它转到 main() 方法并打印。
我的问题是:
- 为什么它首先打印私有构造函数中的“单例私有构造函数...”。我认为控制应该首先转到 main() 方法,因为它是入口点。此外,我没有在任何地方创建任何实例(变量初始化除外)。
- 后来到了静态变量实例化行(此时currentSingleton=null)
private static Singleton currentSingleton = new Singleton();
虽然currentSingleton在这里得到了一个值,但是为什么没有再次调用构造函数呢?
主要是想知道这个程序的控制流程。