デフォルトコンストラクタは、Javaでの静的ブロックの前に実行されたばかり

キロ:

私たちはJavaでクラスをロードすると、最初の静的ブロックが実行され、その後、取得デフォルトコンストラクタしかし、コードの平和以下に、私がすることが観察されどのようなデフォルトコンストラクタは、静的ブロックの前に実行されるばかり。

    public class Hello {

    private static Hello hello = new Hello();

    public Hello() {
        System.out.println("Hello Default Constructor");
    }

    static {
        System.out.println("Hello Static Block");
    }

    public static Hello createHelloInstance() {
        return hello;
    }
}

メインクラス:

   public class MainTest {

        public static void main(String a[])
        {
            Hello.createHelloInstance();
        }
    }

出力:

Hello Default Constructor
Hello Static Block

私はその背後にある基本的な概念を知っている必要があります。何がそう起こっています。誰かの助けを借り、私はその背後の流れを理解することでした。

Mureinik:

あなたは、静的メンバ(持ちhelloで初期化された)new Hello()デフォルトコンストラクタを呼び出しコールを。このメンバーが前に宣言されているのでstaticブロックは、最初に初期化されます。あなたがブロックした後、それを移動した場合、ブロックが最初に実行されます。

public class Hello {
    static {
        System.out.println("Hello Static Block");
    }
    private static Hello hello = new Hello();

    // etc...
}

いっそ、ブロック内で初期化を移動することによって、順序を明示的に。

public class Hello {
    private static Hello hello;
    static {
        System.out.println("Hello Static Block");
        hello = new Hello();
    }

    // etc...
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=341380&siteId=1