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

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

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

    ゞ沉默是金ゞ

    魚離不開水,但是沒有說不離開哪滴水.
    posts - 98,comments - 104,trackbacks - 0

    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.
    我個人分析如下:
    當執行到ClassA a = new ClassB();時開始加載ClassB,這里因為ClassB繼承ClassA,所以加載ClassA,在加載ClassA的時候執行輸出:ClassA's static.。
    ClassA加載完后,加載ClassB,這時執行結果為:ClassB's static.。兩個類都加載完后開始構建對象。
    在構建ClassB對象時,得先構建父類對象ClassA,所以執行分別為:ClassA's constructor.
    ClassB's constructor.那么這句話完了。
     
    到a=new ClassB();時,由于ClassA,ClassB已經被加載過,在內存中。所以只是簡單的進行構建對象。輸出:ClassA's constructor.
    ClassB's constructor.
    希望大家多多指教。(來源于網絡)
    posted on 2009-03-30 09:59 ゞ沉默是金ゞ 閱讀(1264) 評論(4)  編輯  收藏 所屬分類: Java SE

    FeedBack:
    # re: 類的 初始化順序[未登錄]
    2009-03-30 11:17 | kimi
    類的初始化分為類加載后的初始化和類實例化后的初始化,當new一個類的時候,如果此類沒有被加載到vm中,vm會先加載此類,當加載完成后vm會立即執行此類中的所有的靜態初始化代碼。加載完成后,vm會為實例分配內存,然后執行實例初始化代碼,最后是執行構造方法返回新建對象的引用。

    靜態初始化代碼是被static修飾的字段或靜態代碼段,實例初始化代碼是類中聲明并初始化并且沒有被static修飾的字段,還有就是在類中被大括號括起來的代碼段  回復  更多評論
      
    # re: 類的 初始化順序
    2009-03-30 12:49 | 隔葉黃鶯
    關鍵是要把握幾點

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

    2. 構造子對象實例前必須構造出父對象實例,當然在構造子類實例前必須構造父類實例。

    就這么兩點,這里用了類實例和對象實例。區別是,比如有個類A,分別構造了
    A a1 = new A();
    A a2 = new A();
    A a3 = new A();

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

    這里只簡單的說了是由同一個類加載器加的,如果延展開來就會比較復雜。根據類加載器的委托機制和可見性原則還會有不同的情況。  回復  更多評論
      
    # re: 類的 初始化順序[未登錄]
    2009-03-30 13:02 | 新手上路
    @隔葉黃鶯
    這個沒有看懂。。。。  回復  更多評論
      
    # re: 類的 初始化順序
    2009-03-30 14:06 | ゞ沉默是金ゞ
    @kimi
    @隔葉黃鶯
    謝謝關注...  回復  更多評論
      
    主站蜘蛛池模板: 中中文字幕亚洲无线码| 亚洲精品无码专区在线在线播放 | 亚洲另类小说图片| 16女性下面扒开无遮挡免费| 亚洲网址在线观看你懂的| 久久中文字幕免费视频| 78成人精品电影在线播放日韩精品电影一区亚洲 | 国产亚洲精品91| 亚洲AV无码专区日韩| 一级毛片试看60分钟免费播放| 亚洲国产精品成人久久蜜臀| a级毛片免费网站| 亚洲国产精品SSS在线观看AV| 久久精品国产这里是免费| 337p日本欧洲亚洲大胆色噜噜 | 国产亚洲一区二区三区在线不卡 | 久久久精品免费视频| 亚洲黄色在线播放| 中字幕视频在线永久在线观看免费| 亚洲日本久久久午夜精品| 在线观看免费精品国产| 一区二区三区精品高清视频免费在线播放| 亚洲精品无码99在线观看| 久久久精品免费国产四虎| 亚洲免费电影网站| 免费h成人黄漫画嘿咻破解版| 黄色短视频免费看| 亚洲美女精品视频| 四虎免费久久影院| 嫩草成人永久免费观看| 亚洲一区二区三区成人网站 | 3344在线看片免费| 7777久久亚洲中文字幕| 亚洲国模精品一区| 18成禁人视频免费网站| 曰批全过程免费视频免费看| 亚洲a一级免费视频| 永久黄网站色视频免费直播| 大地影院MV在线观看视频免费| 亚洲乱码一二三四区乱码| 精品亚洲视频在线观看|