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

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

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

    Picses' sky

    Picses' sky
    posts - 43, comments - 29, trackbacks - 0, articles - 24

    也談一個對象初始化細節

    Posted on 2007-12-20 10:46 Matthew Chen 閱讀(1081) 評論(1)  編輯  收藏 所屬分類: Java SE
    網上這類的文章多了,也就歸納了一下:

    初始化按串行順序如下:

    ……
    超類靜態成員變量
    超類靜態塊
    子類靜態成員變量
    子類靜態塊
    ……

    ……
    超類成員變量分配引用并默認初始化
    子類成員變量分配引用并默認初始化
    ……
    ……
    超類成員變量用顯式初始化值賦值
    超類構造器
    子類成員變量用顯式初始化值賦值
    子類構造器
    ……
    ……


    另外,這樣的初始化順序中,如果子類繼承了超類的a方法并在其中修改了子類自己的成員變量,而a方法在超類的構造函數中被調用,那么這個修改的值將被“子類成員變量用顯式初始化值賦值”這一過程重新覆蓋而導致修改失效。

    我是這樣理解的,大家給點意見。


    Feedback

    # re: 也談一個對象初始化細節  回復  更多評論   

    2007-12-20 14:53 by 隔葉黃鶯
    記住以下兩點就好理解了

    類的成員先于實例成員初始化
    父類實例與子類實例的關系可以理解為 Is-A 的關系

    所以子類實例初始化之前必須先有父類的實例

    其實還應該區分類的初始化和實例了初始化,反應到字節碼操作指令中是
    類的初始化方法是 <clinit>()
    實例的初始化方法是 <init>()

    任何一個類的初媽化都要求它的所有祖先類(而不是祖先接口)預先被初始化。而一個接口的初始化,并不要求它的祖先接口預先被初始化。

    類有主動初始化和被動初始化,如new和使用靜態字段,還有我們一定用過 Class.forName() 方法,它還有一個重載方法 forName(String name, boolean initialize, ClassLoader loader),一個參數的forName,默認的initialize 是 true,即加載后就初始化。
    主站蜘蛛池模板: 亚洲欧洲无码AV不卡在线| 亚洲国产精品一区| 亚洲免费网站观看视频| 又黄又爽又成人免费视频| 亚洲视频精品在线| 久久精品免费一区二区| 久久亚洲sm情趣捆绑调教| 免费无码毛片一区二区APP| 亚洲精品无码不卡| 18禁美女裸体免费网站| 亚洲国产成人久久三区| 国产成人免费网站| 国产亚洲精aa在线看| 午夜免费福利在线| 免费手机在线看片| 亚洲熟女乱综合一区二区| 特级做A爰片毛片免费看无码| 最新精品亚洲成a人在线观看| 97国免费在线视频| 久久久无码精品亚洲日韩蜜臀浪潮| 一级毛片免费毛片一级毛片免费| 亚洲精品高清国产麻豆专区| 国产精品免费网站| 亚洲AV无码一区二区大桥未久| 在线观着免费观看国产黄| 日韩在线观看视频免费| 亚洲精品字幕在线观看| 3d动漫精品啪啪一区二区免费| 亚洲一级免费视频| 日本19禁啪啪无遮挡免费动图| 美女裸免费观看网站| 亚洲国产精品无码一线岛国| 亚洲免费视频播放| 国产亚洲视频在线播放大全| 亚洲一区AV无码少妇电影☆| **一级毛片免费完整视| 精品国产亚洲一区二区三区在线观看 | 免费视频专区一国产盗摄| 亚洲精品理论电影在线观看| 91麻豆精品国产自产在线观看亚洲| 久久青草免费91线频观看站街|