真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么認識Java從虛擬機角度分析類的實例化順序-創(chuàng)新互聯(lián)

怎么認識Java從虛擬機角度分析類的實例化順序?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,龍沙企業(yè)網(wǎng)站建設,龍沙品牌網(wǎng)站建設,網(wǎng)站定制,龍沙網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,龍沙網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

1、首先展示一下實例代碼(Son.java & Father.java)

public class Father {    
    public static int a=10;//父類的靜態(tài)變量    static{//父類的靜態(tài)代碼塊
        a=20;
    }
    {//父類的構造代碼塊
        a=30;
    }    
    public Father() {//父類的構造方法
        a=40;
    }
}
public class Son extends Father{    
    public static int s=10;//子類的靜態(tài)變量    public int k=20;//子類的實例變量    static{//子類的靜態(tài)代碼塊
        s=20;
    }
    {//子類的構造代碼塊
        s=30;
    }    public Son() {//子類的構造函數(shù)
        s=40;
    }
    {//子類的構造代碼塊
        s=50;
    }
}

2、將son.java文件編譯為son.class文件,然后使用javap反編譯查看Son的字節(jié)碼指令來分析Son的加載順序,更利于理解(javap -v -c Son > p.txt)。

3、執(zhí)行代碼"new Son();"后,分析類的加載順序。

下面的static{};為函數(shù),son();為函數(shù)。

static {};
    descriptor: ()V
    flags: ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: bipush        10
         2: putstatic     #11                 // Field s:I--------------------------順序執(zhí)行靜態(tài)變量的賦值
         5: bipush        20
         7: putstatic     #11                 // Field s:I--------------------------順序執(zhí)行靜態(tài)代碼塊
        10: return
  public packet1020.Son();
    descriptor: ()V
    flags: ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
         0: aload_0         
         1: invokespecial #16                 // Method packet1020/Father."":()V--------------------執(zhí)行父類的函數(shù)(順序不變,第一個)
         4: aload_0         
         5: bipush        20
         7: putfield      #18                 // Field k:I------------------------------------------------按順序收集實例變量賦值
        10: bipush        30
        12: putstatic     #11                 // Field s:I------------------------------------------------按順序收集構造代碼塊
        15: bipush        50
        17: putstatic     #11                 // Field s:I------------------------------------------------按順序收集構造代碼塊
        20: bipush        40
        22: putstatic     #11                 // Field s:I------------------------------------------------最后執(zhí)行自己的構造函數(shù)代碼(順序不變,最后一個)
        25: return

開始分析:

1.觸發(fā)類的加載,在初始化階段,先執(zhí)行父類函數(shù),然后執(zhí)行子類函數(shù),按照順序執(zhí)行靜態(tài)變量賦值與靜態(tài)代碼塊。

2.代碼中執(zhí)行了構造函數(shù),所以執(zhí)行函數(shù)。

結論:

1.父類中順序執(zhí)行靜態(tài)變量賦值,靜態(tài)代碼塊

2.子類中順序執(zhí)行靜態(tài)變量賦值,靜態(tài)代碼塊

3.父類中順序執(zhí)行實例變量賦值,構造代碼塊

4.父類構造函數(shù)

5.子類中順序執(zhí)行實例變量賦值,構造代碼塊

6.子類構造函數(shù)

名字解釋:摘抄自周志明老師的《深入理解Java虛擬機:JVM高級特性與最佳實踐》

1.有且只有4中情況下必須對類進行初始化(執(zhí)行函數(shù))中的第三種:當初始化一個類時,先初始化父類。這就是為什么父類的函數(shù)先于子類的函數(shù)執(zhí)行。

2.函數(shù):編譯器按照源代碼中的順序自動收集類中的所有靜態(tài)變量的賦值動作和靜態(tài)代碼塊中的語句合并而成的。

3.函數(shù):最開始先調用父類的函數(shù),然后編譯器按照源代碼中的順序自動收集類中的實例變量的賦值操作和構造代碼塊中的語句合并,然后插入到構造函數(shù)方法前面,最后是程序員自己寫的構造函數(shù)代碼。

構造代碼塊執(zhí)行順序先于構造函數(shù)

(){
  1.調用父類方法
  2.順序執(zhí)行實例變量的賦值操作和構造代碼塊
  3.程序員自己的構造函數(shù)方法代碼
}

看完上述內容,你們掌握怎么認識Java從虛擬機角度分析類的實例化順序的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


新聞名稱:怎么認識Java從虛擬機角度分析類的實例化順序-創(chuàng)新互聯(lián)
分享URL:http://weahome.cn/article/dcpcjj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部