1. 程式人生 > 其它 >類載入建立屬性賦值順序

類載入建立屬性賦值順序

定義一個類,往往會直接賦值,或者用程式碼塊(static {} 和 {} )的形式,需要搞清楚賦值的順序,才能知道欄位到底對應什麼值

例如有這麼一個類

public class Student {

    static {
        System.out.println("static 塊執行開始~~~");
    }

    static {
        phone = "51227722";
    }


    {
        name = "建宇";
        age = 18;
    }


    {
        name = "小宇";
        age = 25;
    }


    private String name = "小趙";
    private int age = 8;
    private static String phone = "0056";

    static {
        System.out.println("static 塊執行中~~~");
        System.out.println(phone);
    }

    {
        System.out.println("name = " + name);
        System.out.println("age = " + age);
    }

    static {
        phone = "9759";
    }

    static {
        System.out.println("static 塊執行結束~~~");
        System.out.println(phone);
    }

    {
        name = "最後賦值";
        age = -1;
    }

    {
        System.out.println("name = " + name);
        System.out.println("age = " + age);
    }
}

經過網上查閱資料,以及我自己做實驗,可以得到結論執行順序結論:

  1. 父類靜態域
  2. 子類靜態域
  3. 父類的普通域
  4. 父類建構函式
  5. 子類的普通域
  6. 子類的建構函式

其中,靜態域分為static程式碼塊和static屬性定義時賦值,這兩個賦值,值取在下面,也即是行號大的(也可以說靜態域是順序執行,最後執行的肯定就把之前執行的覆蓋咯)

普通域,也分為{}程式碼塊和屬性定義時賦值,和靜態域的執行流程一樣

最後,需要注意static屬性是類載入時賦值的,而普通欄位是new物件執行的,static屬性和static {} 只在類第一次載入時執行,普通域每次new物件時都執行