Java static keyword
阿新 • • 發佈:2018-08-24
我們 word 靜態代碼塊 super關鍵字 導入 ati key 靜態數據成員 執行
Java中static關鍵字主要用於內存管理(是的,你沒聽錯)。我們可以將它應用到變量、方法、代碼塊、嵌套類以及導入包中。靜態關鍵字屬於類,而不是類的實例。
1.靜態變量
- 靜態變量可以被視為所有對象通用的屬性,例如員工的公司名,學生的學校名
- 靜態變量只在類加載時在方法區(class area)中獲取內存
優點:節省內存
2.靜態方法
- 靜態方法屬於類而不是類的對象
- 靜態方法可以被調用在沒有類的實例的情況下,言外之意,靜態方法可以通過類調用,自然也可以通過類對象調用
- 靜態方法可以訪問靜態數據成員並更改他們的值
限制:主要有兩個限制
- 靜態方法不能使用非靜態數據成員或直接調用非靜態方法
- 在靜態上下文中不能使用this或super關鍵字,因為他們就沒有隱式接受this參數
Q&A:為什麽Java的main方法是靜態的?
因為調用一個靜態方法不需要一個對象。如果main方法是一個非靜態方法,那JVM需要先創建一個對象然後才調用main方法,這將導致額外的內存分配
3.靜態代碼塊
- 靜態代碼塊被用於初始化靜態數據成員
- 靜態代碼塊在加載main方法之前被執行,可以對比instance initalizer block的執行時間
Q&A:我們能執行一個沒有main方法的程序嗎?
不行。在JDK1.6以前唯一的方式是使用靜態代碼塊,但是自從JDK1.7,他不可能被執行在沒有main方法的時候
4.靜態內部類
- 靜態內部類可以使用外部類的靜態數據成員和方法,但不能使用非靜態數據成員和方法。不同於非靜態內部類,可以使用外部類的所有數據成員和方法
- 靜態內部類常用於build模式
5.靜態導包
- 可以少寫包的前綴,讓代碼更優美
- 不建議使用
Java static keyword