Flyingis

          Talking and thinking freely !
          Flying in the world of GIS !
          隨筆 - 156, 文章 - 16, 評論 - 589, 引用 - 0
          數據加載中……

          靜態設計

          ??? 作者:Flyingis

          ??? 在我們系統設計中,類方法的功能設計一般是改變對象的狀態,以及返回對象的信息。然而在這兩種情況之外,還存在一種類型的方法,其設計目的,是專為系統提供某種特定的功能,作為系統專用的一種工具,有的書上稱之為“工具方法”,一般情況下,我們會將這類方法設計成靜態的,保證系統中所有的代碼都可以使用它。在Java API中,最典型的例子之一是java.lang.Math類,它的所有變量、方法都是靜態的,專為數學計算而設計。

          static?double?PI;??//類變量,代表圓周率
          static?double?abs(double?a);??//類方法,取雙精度浮點類型參數的絕對值

          ??? 經過關鍵字static修飾后,對象中的實例變量或實例方法就成為了類變量、類方法,使用靜態的好處是,在代碼中,我們可以不用創建對象而直接使用類變量和類方法,這樣可以簡化我們的代碼,減少系統的內存開銷。例如,在多處需要使用這些方法所提供的功能時,如果使用實例方法,就需要我們創建多個對象來調用這些方法,對于一個規模龐大的系統來說,這通常是不理智的,使用靜態方法,可以保證該靜態方法僅會存在于系統內存中的一個地址段內。從這里也可以看出,靜態方法內應該盡量使用類變量代替實例變量,否則在多次調用靜態方法的過程中,會創建多個實例變量,增加系統占用的內存空間。

          ??? Java虛擬機第一次加載類的時候,會初始化靜態的代碼塊,這和實例變量和實例方法的加載時間不一樣。靜態的代碼可以存放在一個static代碼塊中,在類加載的時候一起初始化,但是在static代碼塊中不能拋出異常:

          static?{
          ??
          double?i?=?java.lang.Math.random();
          ??
          long?time?=?System.currentTimeMillis();
          }

          ??? 現在來理解“靜態”,簡而言之,就是一旦在系統中生成,其地址就不再改變的變量或方法,因此,靜態設計可以為我們提供如下方便:

          ??? 1.簡化或優化代碼。
          ??? 2.減少系統的內存開銷。
          ??? 3.分離出系統中的工具類。

          ??? 世上少有魚與熊掌兼得得事,如果漫無目的地使用靜態,也會出現一些意外情況。

          ??? 靜態變量在內存中只會存在一份拷貝,而靜態設計的目的之一是要為系統提供一系列通用的工具,因此所有的代碼都可以對靜態變量進行訪問或改變它的值,這樣容易使設計者對當前變量所存儲的值產生疑惑,不知道是誰動了我的“奶酪”。

          ??? 如果在程序上面靜態導入相應的包、類,在程序中可以不使用類名,這樣會給代碼閱讀者帶來混淆。靜態導入的格式:

          import?static?com.sun.staticClassTools.CommonTool;

          ??? 靜態變量(類變量)的生命周期是從類的第一次加載到應用程序的結束,使用靜態變量存儲集合通常會帶來巨大的內存開銷,因為Java垃圾回收不會回收在以靜態方式存在的集合對象,直到應用程序終止,哪怕這些集合對象已經不再使用。

          ??? 靜態設計違反OO設計原則,它是非面向對象的,類似于C語言中的全局函數,以過程的思想處理我們的代碼。

          ??? 因此,過度的靜態設計會給我們的程序帶來包括內存泄漏在內的多種問題,一般情況下,如果可以不使用靜態,應該盡量避免,保證系統中的每一處靜態設計都有其明確的存在的意義。

          posted on 2006-12-27 16:16 Flyingis 閱讀(2471) 評論(0)  編輯  收藏 所屬分類: JavaSE

          主站蜘蛛池模板: 资讯 | 麻阳| 新宾| 含山县| 东城区| 绥化市| 达日县| 四川省| 和林格尔县| 辽源市| 桦川县| 景东| 武安市| 临泉县| 瑞安市| 高密市| 松桃| 利津县| 文水县| 茌平县| 澎湖县| 东安县| 会昌县| 乌恰县| 江油市| 益阳市| 黔江区| 永登县| 巧家县| 襄城县| 通河县| 米易县| 洪洞县| 九江市| 清河县| 洛川县| 灯塔市| 香河县| 漳浦县| 德州市| 原阳县|