itkui

          年少為何不輕狂!

          對象的構(gòu)造和初始化

          昨天看到BlueIce的一個post,詭秘的Java構(gòu)造問題。里面有一句話:“關(guān)于構(gòu)造函數(shù)的作用以及類的構(gòu)造問題,而這是初學(xué)者經(jīng)常會犯甚至是有經(jīng)驗的程序員偶爾也會犯的錯誤”。里面所提到問題的可以歸結(jié)為對象初始化問題。
          我想避免此類問題出現(xiàn)的最佳方法是將對象的構(gòu)造和初始化過程進(jìn)行總結(jié)、概念化。這樣,即使出現(xiàn)問題也可以按照這個規(guī)律一步一步的找到問題的所在。

          對象的初始化操作將遞歸如下的步驟進(jìn)行:
          1.設(shè)置實例變量的值為缺省的初始值(0,false,null),不同的數(shù)據(jù)類型有不同的初始值。
          2.調(diào)用類的構(gòu)造器(但是還是沒有執(zhí)行構(gòu)造方法體),綁定構(gòu)造器函數(shù)。
          3.如果構(gòu)造器中有this()調(diào)用,則根據(jù)this()調(diào)用的參數(shù)調(diào)用相應(yīng)的重載構(gòu)造器,然后,轉(zhuǎn)到步驟5;否則轉(zhuǎn)到步驟4。
          4.除java.lang.Object類外,調(diào)用父類中的初始化塊初始化父類的屬性,然后調(diào)用父類構(gòu)造器,如果在構(gòu)造器中有super()調(diào)用,則根據(jù)super()中的參數(shù)調(diào)用父類中相應(yīng)的構(gòu)造器。
          5.使用初始化程序和初始化塊初始化成員。
          6.執(zhí)行構(gòu)造器方法體中其他語句。

          容易出現(xiàn)問題的地方:雖然變量在定義的時候進(jìn)行了初始化,在實際初始化過程中還是先將其設(shè)為1所示默認(rèn)值,然后在過程5才會真正的進(jìn)行初始化。如果在這里調(diào)用了父類構(gòu)造器的話,如果父類構(gòu)造器中有相同變量的默認(rèn)初始化的話(Java的動態(tài)綁定機制),就極為有可能出現(xiàn)問題。而這時候出現(xiàn)的問題通常難以察覺。

          posted on 2007-07-05 13:07 itkui 閱讀(1066) 評論(0)  編輯  收藏 所屬分類: Java

          導(dǎo)航

          統(tǒng)計

          留言簿(1)

          隨筆檔案(24)

          收藏夾(15)

          好站珍藏

          學(xué)習(xí)資源

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 紫阳县| 泾阳县| 徐州市| 武胜县| 盐城市| 吉木萨尔县| 秀山| 仙居县| 寿光市| 辰溪县| 华宁县| 关岭| 安龙县| 和硕县| 洛扎县| 拉孜县| 灵川县| 明溪县| 金平| 河池市| 德安县| 离岛区| 潮安县| 逊克县| 定边县| 汶上县| 大洼县| 扶风县| 泗阳县| 玉溪市| 黄骅市| 瑞昌市| 南部县| 宜兰市| 康平县| 新乡市| 赫章县| 尼玛县| 巴青县| 巴南区| 韩城市|