java之靜態(tài)代碼塊與構造方法加載次序

  • java中的靜態(tài)代碼塊,非靜態(tài)塊,構造辦法的加載順序是這樣的:
    靜態(tài)代碼塊 (程序加載時一次)--->非靜態(tài)塊(每次實例化一次)---> 構造方法(每次實例化一次),廢話不多說,上代碼。
A類:
public class A {

    static {
        System.out.print("1");
    }
     {
        System.out.print("#");
    }

    public A(){
        System.out.print("a");
    }


}
B類:
/**
 * @Author: Cyy
 * @Description:
 * @Date:Created in 16:08 2018/7/28
 */
public class B extends A {

    static {
        System.out.print("2");
    }
     {
        System.out.print("*");
    }

    public B(){
        System.out.print("b");
    }
    {
        System.out.print("c");
    }

    public static void main(String[] args) {
//        A a=new A();//結果12a,執(zhí)行一次2個靜態(tài)區(qū)代碼,執(zhí)行非靜態(tài)代碼塊,再執(zhí)行A的構造辦法
//        B b=new B();//結果12ab,執(zhí)行一次2個靜態(tài)區(qū)代碼,執(zhí)行非靜態(tài)代碼塊,再依次執(zhí)行A和B的構造辦法
        A ab=new B();//同上

        ab=new B();//此時靜態(tài)代碼塊已經(jīng)加載,只加載一次,執(zhí)行非靜態(tài)代碼塊,是每次實例化都一次,跟構造方法一樣,比構造辦法先,輸出非靜態(tài)代碼和構造辦法的部分

    }
}

我們嘗試運行,看看結果:


image.png

結果是12#a*b#a*b,來分析下整個流程:

  • 第一步按順序加載2個類的靜態(tài)代碼塊,程序載入時,只會執(zhí)行一次,輸出12;
  • 第二步按順序分別加載A類和B類的非靜態(tài)代碼塊以及構造方法,輸出#a*b;
  • 第三步,再次實例化B類的時候,不在靜態(tài)代碼塊了,只會加載非靜態(tài)代碼塊和構造方法,再次輸出結果#a*b;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容