Использование и поток статических операторов в программе 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 получает здесь значение, почему конструктор не вызывается снова?

Главным образом я хочу узнать, как проходит управление этой программой.

Ответы на вопрос(6)

Ваш ответ на вопрос