MDA/MDD/TDD/DDD/DDDDDDD
          posts - 536, comments - 111, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          java的static

          Posted on 2010-12-30 01:20 leekiang 閱讀(401) 評論(0)  編輯  收藏 所屬分類: java

          Static 的意義與實作方式

          ?

          Class(static) field :共用一塊記憶體
          class(static) method
          :共用一塊記憶體
          instance(
          static) field :隨著每個 instance 各有一塊記憶體
          instance (
          static) method :共用一塊記憶體
          ??? instance method
          為什么不是隨著每個 instance 占有一塊記憶體,反倒是共用一塊記憶體?其實,讓每個 instance method 如同 instance field 一樣,隨著每個 instance 占有一塊記憶體,這么做當然是可以的,只是 Java 編譯器和 JVM 都不這么做,因為太浪費記憶體空間了。一個 field 少則占用一個 byte ,多則占用數百 Byte ,但是 method 少則數個 byte ,多則數百 Kilo Byte Mehtod 耗費的記憶體是 field 的數百倍,甚至數千倍,當然是能共用就盡量共用,比較不會消耗記憶體。既然 JVM 讓一個 class 的所有 instance 共用相同的 instance method ,下面兩行程式碼在 instanceMethod() 內部時,如何區分是 instance1 instance2
          instance1.instanceMethod();
          instance2.instanceMethod();
          因為編譯器會幫我們在把 instance1 instance2 個別傳入 instanceMethod() 中當作第一個參數。也就是說,任何 instance method 參數的實際個數都會比表面上多一個,這個多出來的參數是由 Java 編譯器幫我們加上去的,用來代表對應的 instance 。此參數的變數名稱為 this ,也是 Java 的一個關鍵字( keyword )。
          ???
          當調用某個 instance method 或使用某個 instance field 時,你必須在前面加上該 instance 的名稱,如果該 instance method/field 相關的 instance 和當時程式碼所在的 instance method instance 指的是同一個 instance 時,該 instance 的名稱就是 this ,這種情況下,你也可以選擇不在前面加上「 this. 」。
          ???
          然而,在某些狀況下,非得在前面加上「 this. 」不可。例如,當 method 中的參數或區域變數和 instance field 名稱完全相同時,如果不在前面冠上「 this. 」,那么指的是參數或區域變數;如果在前面冠上「 this. 」,那么指的才是 instance field

          轉自http://www.aygfsteel.com/guoyongfei/archive/2009/02/06/253571.html
          主站蜘蛛池模板: 包头市| 玉门市| 青龙| 明水县| 克拉玛依市| 普宁市| 德江县| 米林县| 锡林浩特市| 双城市| 临邑县| 河西区| 德清县| 宜丰县| 庐江县| 潼南县| 永德县| 柯坪县| 昌都县| 内丘县| 于田县| 塘沽区| 黑水县| 遵义县| 磴口县| 纳雍县| 界首市| 甘泉县| 伊金霍洛旗| 江津市| 萝北县| 衡阳市| 额尔古纳市| 广宁县| 禄劝| 嘉兴市| 文成县| 锦屏县| 永仁县| 苗栗县| 青河县|