static是 Java中常用的關鍵字,代表“全局”或者“靜態”的意思。關於static的特徵,可以理解爲:方便在沒有創建對象的情況下來進行某些操作。通常可用於修飾成員變量和方法,也可以形成靜態代碼塊。
實際應用中,可將需頻繁操作、通用型信息設置、公共組件封裝等操作設置爲“靜態”。在本節中,我們將針對“static + 成員變量”的應用進行相關內容總結。
應用一:static + 成員變量 vs 成員變量
概念:
靜態成員:用static修飾的成員變量,通常也稱爲靜態成員、靜態屬性、類成員、全局屬性等。
非靜態成員:沒有被static修飾的成員變量,也稱爲叫做非靜態成員、實例變量,實例成員,對象成員、對象屬性等。
特徵:
靜態成員:
-
靜態成員是屬於整個類的,由類所進行維護,僅在類初次加載時會被初始化,在類銷燬時回收。
-
通過該類實例化的所有對象都共享類中靜態資源,任一對象中信息的修訂都將影響所有對象。
-
由於靜態成員在類加載期間就已經完成初始化,存儲在Java Heap(JDK7.0之前存儲在方法區)中靜態存儲區,因此優先於對象而存在,可以通過類名和對象名兩種方式訪問。
非靜態成員:
-
非靜態成員屬於對象獨有,每個對象進行實例化時產生各自的成員,隨着對象的回收而釋放。
-
對象對各自成員信息的修訂不影響其他對象
-
只能通過對象名訪問。
應用:
可以將頻繁調用的公共信息、期望加快運行效率的成員設置爲靜態。但需注意,由於其生命週期長,即資源佔用週期長,要慎用。
示例:
定義國產車類CarDemo,分別包含靜態屬性firm,對象屬性color、price
定義測試類CarTest,針對CarDemo進行測試
備註:此處由於展示篇幅有限,暫不考慮屬性的訪問權限
總結:
-
類外可應用“類名.成員名”或“對象名.成員名”的方式訪問非私有靜態成員,更推薦用“類名.成員名”體現其特性。應用“對象名.成員名”時會出現警告,但不影響程序運行。
-
類內可應用“類名.成員名”或“this.成員名”或“成員”的方式訪問,應用“this.成員名”時會出現警告,但不影響程序運行。