靜態塊(變量)和非靜態塊(變量)

package staticinit.one;

public class Main1 {
    public static void main(String[] args) {
        System.out.println("第一遍初始化StaticOrInstance...");
        new StaticOrInstance();
        System.out.println("第二遍初始化StaticOrInstance...");
        new StaticOrInstance();
        /*
         * 輸出結果:
         * 第一遍初始化StaticOrInstance...
         * Mug(3)
         * Mug(4)
         * Mug(1)
         * Mug(2)
         * StaticOrInstance constructor...
         * 第二遍初始化StaticOrInstance...
         * Mug(1)
         * Mug(2)
         * StaticOrInstance constructor...
         */
    }
}

class StaticOrInstance {
    public Mug mug1;
    public Mug mug2;
    public static Mug mug3;
    public static Mug mug4;

    {
        mug1 = new Mug(1);
        mug2 = new Mug(2);
    }
    static {
        mug3 = new Mug(3);
        mug4 = new Mug(4);
    }
    public StaticOrInstance() {
        System.out.println("StaticOrInstance constructor...");
    }

}

class Mug {
    public Mug() {
    }

    public Mug(int i) {
        System.out.println("Mug(" + i + ")");
    }
}

注:1.在類初始化時,先初始化靜態塊或變量,再初始化非靜態塊或變量(StaticOrInstance類中靜態塊位於非靜態塊後面,但是輸出結果中靜態塊先初始化);2.靜態塊或變量只會在第一次初始化時初始化,而非靜態塊或變量會在每一次類初始化時執行初始化(在第二次初始化時靜態塊沒有再次初始化);3.靜態塊(變量)和非靜態塊(變量)均在構造方法之前被初始化。

發佈了47 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章