<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成人一区二区三区在线看| 日本视频免费观看| 国产一级一片免费播放| 国产精品一区二区三区免费 | 免费一级做a爰片久久毛片潮喷| 亚洲一级毛片在线观| 美女又黄又免费的视频| 3344永久在线观看视频免费首页| 亚洲人成在线中文字幕| 国产美女无遮挡免费网站| 黄色网址在线免费| 色九月亚洲综合网| 亚洲电影免费在线观看| 国产免费69成人精品视频| 三年片在线观看免费观看大全一| 亚洲精品蜜夜内射| 无码欧精品亚洲日韩一区| 国产免费久久精品| 青青草a免费线观a| 中国一级特黄的片子免费| 亚洲JIZZJIZZ妇女| 亚洲精品在线电影| 伊人久久精品亚洲午夜| 青青青国产免费一夜七次郎| 日韩精品人妻系列无码专区免费 | 日日摸夜夜添夜夜免费视频| 亚洲视频在线观看网址| 4338×亚洲全国最大色成网站| 在线a级毛片免费视频| 人人揉揉香蕉大免费不卡| 午夜在线亚洲男人午在线| 亚洲AV色吊丝无码| 亚洲AV无码不卡无码| 亚洲区小说区图片区| 日本免费高清一本视频| 免费视频专区一国产盗摄| 国精产品一区一区三区免费视频| 免费无码国产在线观国内自拍中文字幕 | 亚洲人成7777影视在线观看| 亚洲精品乱码久久久久久久久久久久 | 亚洲偷自拍另类图片二区|