itkui

          年少為何不輕狂!

          對象的構造和初始化

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

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

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

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

          導航

          統計

          留言簿(1)

          隨筆檔案(24)

          收藏夾(15)

          好站珍藏

          學習資源

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 安丘市| 大理市| 湘阴县| 宜州市| 西城区| 高阳县| 宣恩县| 玉林市| 洪泽县| 岳西县| 五河县| 高阳县| 延安市| 大足县| 阿巴嘎旗| 岢岚县| 老河口市| 尖扎县| 阜南县| 华蓥市| 阿巴嘎旗| 万州区| 保德县| 抚州市| 确山县| 稻城县| 尼勒克县| 鄂托克前旗| 琼海市| 洛川县| 盐亭县| 米林县| 师宗县| 绿春县| 梅州市| 武平县| 鹤岗市| 新绛县| 巫山县| 涟水县| 保亭|