轉載請保留原文鏈接: http://dashidan.com/article/java/basic/12.html
12.Java靜態變量與常量
`static`修飾的成員變量和成員方法習慣上稱爲靜態變量和靜態方法,可以直接通過類名來訪問. 只要這個類被加載,Java虛擬機就能根據類名在運行時數據區的方法區內定找到他們. 因此`static`修飾的變量和方法,可以在它所屬的對象創建之前訪問,不用創建對象.
① 靜態變量
訪問語法爲:
類名.靜態方法名(參數列表...) 類名.靜態變量名</p>
按照是否靜態的對類成員變量進行分類可分兩種:
被static修飾的變量,叫靜態變量或類變量.
沒有被static修飾的變量,叫實例變量.
1.靜態變量與實例變量區別:
靜態變量在內存中只有一個拷貝(節省內存), JVM只爲靜態分配一次內存.在加載類的過程中完成靜態變量的內存分配. 可用類名直接訪問, 當然也可以通過對象來訪問(不推薦).
對於實例變量, 每創建一個實例, 就會爲實例變量分配一次內存, 實例變量可以在內存中有多個拷貝, 互不影響, 需要通過實例的引用來訪問.
2.靜態變量應用場景:
在對象之間共享值時
方便訪問變量時
貓都有4條腿,2隻眼睛一張嘴.這3條屬性是貓的通用屬性,我們便可以把這三個屬性設置爲static
靜態變量.
return返回值
我們在定義靜態變量時,通常將所有字母大寫,與實例變量作區分.
靜態方法
靜態方法可以直接通過類名調用, 任何的實例也可以調用.因此靜態方法只能訪問所屬類的靜態變量和靜態方法, 不能用`this`和`super`關鍵字.不能直接訪問所屬類的實例變量和實例方法(沒有static修飾的成員變量和成員方法).
示例代碼:
package com.dashidan.lesson11;/** * 大屎蛋教程網-dashidan.com * <p> * Java教程基礎篇: 11. Java靜態變量與常量 */public class Demo1 { public static void main(String[] args) { /** 出處貓的靜態屬性*/ System.out.println("MOUSE_NUM: " + Cat.MOUSE_NUM); System.out.println("EYE_NUM: " + Cat.EYE_NUM); System.out.println("LEG_NUM: " + Cat.LEG_NUM); }}
Cat類:
package com.dashidan.lesson11;/** * 大屎蛋教程網-dashidan.com * <p> * Java教程基礎篇: 11. Java靜態變量與常量 * Cat 類 */public class Cat { public static int MOUSE_NUM = 1; public static int EYE_NUM = 2; public static int LEG_NUM = 4;}
輸出:
MOUSE_NUM: 1 EYE_NUM: 2 LEG_NUM: 4
② Java常量
final
是Java的一個保留關鍵字, 可以聲明成員變量、方法、類以及局部變量. 被聲明final的變量, 一但賦值便不能再次修改.編譯器會檢查代碼,如果你試圖將變量再次初始化的話,編譯器會報編譯錯誤.final
變量經常和static
關鍵字一起使用作爲常量
.
例:
public static final WEB_NAME = "大屎蛋教程網."public static final WEB_URL = "http://dashidan.com"
1.final關鍵字要點
方法前面加上final關鍵字,代表這個方法不可以被子類的方法重寫.
類名前面加上final關鍵字,代表這個方法不可以被繼承.
final關鍵字可以用於成員變量、局部變量、方法以及類.
final成員變量必須在聲明的時候初始化或者在構造器中初始化, 否則就會報編譯錯誤.
不能對final變量再次賦值.
fina局部變量必須在聲明時賦值.
在匿名類中所有變量都必須是final變量.
final方法不能被重寫.
final類不能被繼承.
接口中聲明的所有變量本身是final的.
final和abstract這兩個關鍵字是反相關的, final類就不可能是abstract的.
final方法在編譯階段綁定, 稱爲靜態綁定(static binding).
沒有在聲明時初始化final變量的稱爲
空白final變量
(blank final variable), 必須在構造器中初始化, 或者調用this()初始化. 否則編譯器會報錯.將類、方法、變量聲明爲final能夠提高性能, 這樣JVM就有機會進行估計,然後優化.
按照Java代碼慣例,final變量就是常量, 而且通常常量名要大寫
對於集合對象聲明爲final指的是引用不能被更改, 但可以向其中增加, 刪除或者改變內容.
final關鍵字
涉及到了很多類的繼承相關的概念, 可以參考Java教程進階篇Java對象相關的文章後, 再回頭看這些知識就很好理解了.Java對象
③ 相關文章