<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    廉頗老矣,尚能飯否

    java:從技術(shù)到管理

    常用鏈接

    統(tǒng)計(jì)

    最新評論

    類的 初始化順序【轉(zhuǎn)載】

    class ClassA{
        
    static{
            System.out.println(
    "ClassA's static.");
        }

        
    public ClassA(){
            System.out.println(
    "ClassA's constructor.");
        }

    }

    class ClassB extends ClassA{
        
    static{
            System.out.println(
    "ClassB's static.");
        }

        
    public ClassB(){
            System.out.println(
    "ClassB's constructor.");
        }

    }

    public class TestClass {

        
    public static void main(String[] args) {
            ClassA a 
    = new ClassB();
            System.out.println(
    "===============");
            a 
    = new ClassB();
        }


    }

    輸出:
    ClassA's static.
    ClassB's static.
    ClassA's constructor.
    ClassB's constructor.
    ===============
    ClassA
    's constructor.
    ClassB's constructor.
    我個人分析如下:
    當(dāng)執(zhí)行到ClassA a = new ClassB();時開始加載ClassB,這里因?yàn)镃lassB繼承ClassA,所以加載ClassA,在加載ClassA的時候執(zhí)行輸出:ClassA's static.。
    ClassA加載完后,加載ClassB,這時執(zhí)行結(jié)果為:ClassB's static.。兩個類都加載完后開始構(gòu)建對象。
    在構(gòu)建ClassB對象時,得先構(gòu)建父類對象ClassA,所以執(zhí)行分別為:ClassA's constructor.
    ClassB's constructor.那么這句話完了。
     
    到a=new ClassB();時,由于ClassA,ClassB已經(jīng)被加載過,在內(nèi)存中。所以只是簡單的進(jìn)行構(gòu)建對象。輸出:ClassA's constructor.
    ClassB's constructor.
    希望大家多多指教。
    ============================
    類的初始化分為類加載后的初始化和類實(shí)例化后的初始化,當(dāng)new一個類的時候,如果此類沒有被加載到vm中,vm會先加載此類,當(dāng)加載完成后vm會立即執(zhí) 行此類中的所有的靜態(tài)初始化代碼。加載完成后,vm會為實(shí)例分配內(nèi)存,然后執(zhí)行實(shí)例初始化代碼,最后是執(zhí)行構(gòu)造方法返回新建對象的引用。

    靜態(tài)初始化代碼是被static修飾的字段或靜態(tài)代碼段,實(shí)例初始化代碼是類中聲明并初始化并且沒有被static修飾的字段,還有就是在類中被大括號括起來的代碼段
    ===========================
    關(guān)鍵是要把握幾點(diǎn)

    1. 對象實(shí)例初始化之前要初始化類實(shí)例,它們對應(yīng)字節(jié)碼的方法名分別是 cinit() 和init(),類的靜態(tài)塊編譯后會放在 cinit() 方法中,{} 括起來的非靜態(tài)塊會放到 init() 方法中。

    2. 構(gòu)造子對象實(shí)例前必須構(gòu)造出父對象實(shí)例,當(dāng)然在構(gòu)造子類實(shí)例前必須構(gòu)造父類實(shí)例。

    就這么兩點(diǎn),這里用了類實(shí)例和對象實(shí)例。區(qū)別是,比如有個類A,分別構(gòu)造了
    A a1 = new A();
    A a2 = new A();
    A a3 = new A();

    三個是對象實(shí)例,但是只要同一個類加載器加載的,那么
    a1.getClass()和a2.getClass(),a3.getClass() 就是同一個實(shí)例,叫做它們的類實(shí)例。

    這里只簡單的說了是由同一個類加載器加的,如果延展開來就會比較復(fù)雜。根據(jù)類加載器的委托機(jī)制和可見性原則還會有不同的情況。


    柳德才
    13691193654
    18942949207
    QQ:422157370
    liudecai_zan@126.com
    湖北-武漢-江夏-廟山

    posted on 2009-03-31 17:26 liudecai_zan@126.com 閱讀(164) 評論(0)  編輯  收藏 所屬分類: 程序人生

    主站蜘蛛池模板: 免费看成人AA片无码视频吃奶| 中文字幕在线成人免费看| 亚洲人成网站在线在线观看| 免费无码又爽又刺激毛片| 一级成人a做片免费| 亚洲精品免费视频| 女人张腿给男人桶视频免费版| 日韩精品免费一线在线观看| 波多野结衣久久高清免费| 国产vA免费精品高清在线观看| 亚洲专区先锋影音| 免费看国产精品麻豆| 久操视频免费观看| 久久亚洲中文字幕无码| 亚洲Av永久无码精品三区在线| 免费无码又爽又刺激网站直播| 亚洲手机中文字幕| 国产成人高清亚洲| 最近免费中文字幕4| 久久国产精品免费网站| 特级毛片在线大全免费播放| 亚洲制服丝袜在线播放| 日韩精品亚洲aⅴ在线影院| 成人免费毛片内射美女APP| 国产在线播放线91免费| 亚洲精品日韩一区二区小说| 亚洲AV色香蕉一区二区| 免费在线观看理论片| 中国在线观看免费高清完整版| 最近免费中文字幕MV在线视频3 | 亚洲AV综合永久无码精品天堂 | 伊人久久亚洲综合影院首页| 四虎影视www四虎免费| 久久青草免费91线频观看站街| 国产av无码专区亚洲av毛片搜| 亚洲一级视频在线观看| 亚洲三级电影网址| 亚洲色欲色欲www在线丝| 国产免费丝袜调教视频| 男女午夜24式免费视频| caoporm碰最新免费公开视频|