類初始化詳細過程!

package zhao;
public class TestClass extends BaseClass {
 static{
        System.out.println("我輸出的是 子類靜態塊內容→"+TestClass.name);//第四步
    }
    {
        System.out.println("我輸出的是 子類非靜態塊內容→"+this.code);//第十三步
    }
    static String name = "子類靜態變量";//第五步
    String code ="子類非靜態變量初始化";//第十四步
    TestClass(){
        code = "子類構造方法裏該修了的 code 的值";//第十六步
        System.out.println("我輸出的是 子類構造體→"+code);//第十七步
    }
    static{
        System.out.println("我輸出的是 子類靜態塊內容→"+name);//第六步
    }
    {
        System.out.println("我輸出的是 子類非靜態塊內容→"+code);//第十五步
    }
    /** *//**
     * @param args
     */
    public static void main(String[] args) {
        new TestClass();
    }
}
class BaseClass{
 static {
  
        System.out.println("我輸出的是 父類靜態塊內容→"+BaseClass.basename);//第一步,因爲basename先初始化默認值!所以爲null
    }
    {
        System.out.println("我輸出的是 父類非靜態塊內容→"+this.basecode);//第七步,因爲basecode先初始化默認值!所以爲null
    }
    static String basename = "父類靜態變量"; //第二步
    String basecode ="父類非靜態變量初始化";//第八步
    BaseClass(){
        basecode = "父類構造方法裏該修了的 basecode 的值";//第十一步
        System.out.println("我輸出的是 父類構造體→"+basecode);//第十二步
    }
    static {
        System.out.println("我輸出的是 父類靜態塊內容→"+basename);//第三步
    }
    {
        System.out.println("我輸出的是 父類非靜態塊內容→"+basecode);//第九步
    }
}

1:父類靜態變量的默認初始化

2.父類靜態變量初始化,父類靜態塊代碼(靜態變量和靜態塊代碼中,哪個在前面就先執行哪個)

3:子類靜態變量的默認初始化

4.子類靜態變量,子類靜態塊代碼(靜態變量和靜態塊代碼中,哪個在前面就先執行哪個)

5:父類非靜態變量的默認初始化

6:父類非靜態變量,父類非靜態塊代碼(非靜態變量和非靜態塊代碼中,哪個在前面就先執行哪個)

7.父類構造體

8.子類非靜態變量的默認初始化

9.子類非靜態變量,子類非靜態塊代碼(非靜態變量和非靜態塊代碼中,哪個在前面就先執行哪個)

10:子類構造體

經常有人問初始化的順序,我在這裏詳細的說明了,看帖一定要回帖哦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章