シングルトンパターンについてはたくさんの質問があることを私は知っています。しかし、ここで私が知りたいのは、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です)
次に、行に移動して
private static Singleton currentSingleton = new Singleton();
、プライベート変数を初期化します。そして最後に、main()メソッドに移動して出力します。
私の質問は次のとおりです。
- プライベートコンストラクターにある「シングルトンプライベートコンストラクター...」を最初に出力する理由。エントリポイントであるため、コントロールは最初にmain()メソッドに移動する必要があると思いました。また、インスタンスをどこにも作成していません(変数の初期化を除く)。
- 後で静的変数のインスタンス化行に移動します(この時点ではcurrentSingleton = null)
private static Singleton currentSingleton = new Singleton();
currentSingletonはここで値を取得しますが、コンストラクターが再度呼び出されないのはなぜですか?
主にこのプログラムの制御の流れを知りたいです。