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 閱讀(1066) 評論(0)  編輯  收藏 所屬分類: Java

          導航

          統計

          留言簿(1)

          隨筆檔案(24)

          收藏夾(15)

          好站珍藏

          學習資源

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 关岭| 民丰县| 佛教| 盐亭县| 武宁县| 顺昌县| 屯门区| 丰都县| 乌恰县| 宁波市| 商河县| 安龙县| 中宁县| 乌鲁木齐县| 上蔡县| 玉山县| 龙南县| 肥西县| 佳木斯市| 太湖县| 盘锦市| 南宫市| 嘉义市| 资阳市| 临沭县| 榆树市| 北京市| 巴塘县| 岱山县| 苗栗市| 新化县| 铁岭市| 信宜市| 客服| 长岛县| 育儿| 九江县| 金川县| 嘉黎县| 栾城县| 静乐县|