Использование и поток статических операторов в программе Singleton
Я знаю, что есть много вопросов по шаблону синглтона. Но вот что я хотел бы знать о выводе, который также может охватывать, как «статический» работает в 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 по-прежнему равна нулю)
Тогда это идет к линииprivate static Singleton currentSingleton = new Singleton();
и затем инициализирует приватную переменную. Затем, наконец, он переходит к методу main () и печатает.
Мои вопросы:
Почему сначала печатается «Private конструктор Singleton ...», который находится в приватном конструкторе. Я думал, что управление должно сначала перейти к методу main (), так как это точка входа. Также я не создаю ни одного экземпляра в любом месте (за исключением инициализации переменной).Позже он переходит к строке создания статической переменной (currentSingleton = null в этой точке)private static Singleton currentSingleton = new Singleton();
Хотя currentSingleton получает здесь значение, почему конструктор не вызывается снова?Главным образом я хочу узнать, как проходит управление этой программой.