Java中Static關鍵字的使用

1.Static關鍵字的用途

1.1 Static修飾成員變量

1.1.1 Static修飾成員變量的需求

當我們在代碼中出現一個成員變量在我們每次創建不同的對象時,所賦值都一樣,我們就可以把它放在一個公共區域內,不管幾個對象都可以操作使用,而不在自己的對象保存數據,可以節約空間

1.1.2 靜態成員變量使用注意事項

1. 靜態成員變量是使用static修飾的成員變量,定義在內存的數據區
2. 靜態成員變量不推薦使用類對象調用,會提示警告,使用static修飾的類內的成員變量,應該通過靜態方式訪問
3. 靜態成員變量使用類名調用是沒有任何的問題。強烈推薦方式
4. 在代碼中沒有創建對象時,可以通過類名直接使用靜態成員變量,和對象無關
5. 代碼中對象已經被JVM的GC銷燬時,依然可以通過類名調用靜態成員變量,和對象無關
6. 不管通過哪一種方式調用靜態成員變量,修改對應的靜態成員變量數據,所有使用到當前靜態成員變量的位置,都會受到影響。


1.1.3 靜態成員變量和對象無關

1. 從內存角度出發分析
    靜態成員變量是保存在內存的數據區
    類對象佔用的實際內存空間是在內存的堆區
    這兩個區域是完全不同的,所有可以說靜態成員變量和對象沒有關係 【沒有對象】

2. 從靜態成員變量以及類對象生命週期來分析
    靜態成員變量是隨着類文件(.class) 字節碼文件的加載過程中,直接定義在內存的數據 區。靜態成員變量從程序運行開始就已經存在。
    類對象是在代碼的運行過程中,有可能被創建的。程序的運行過中,有可能會被JVM的CG垃圾回收機制銷燬,程序在退出之前一定會銷燬掉當前Java程序使用到的所有內存。
    靜態成員變量在程序退出之後,纔會銷燬
    靜態成員變量的生命週期是從程序開始,到程序結束
    類對象只是從創建開始,而且隨時有可能被JVM的GC銷燬
    生命週期不在同一個時間線上,所以靜態成員變量和類對象無關,【沒有對象】

在這裏插入圖片描述

1.2 Static修飾成員方法

1.2.1 靜態成員方法注意事項

1. 靜態成員方法推薦使用靜態方式調用,通過類名調用 【強烈推薦】
    不推薦使用類對象調用,因爲 【沒有對象】
2. 靜態成員方法中不能使用非靜態成員 ==> (非靜態成員方法和非靜態成員變量)
    因爲 【沒有對象】
3. 靜態成員方法中不能使用this關鍵字
    因爲 【沒有對象】
4. 靜態成員方法中可以使用類內的其他靜態成員 【難兄難弟】
5. 靜態成員方法中可以通過new 構造方法創建對象
    單身狗可以找對象
    不能挖牆腳但是能自己找


1.2.2 靜態成員方法特徵解釋

1. 靜態成員方法加載時間問題
    靜態成員方法是隨着.class字節碼文件的加載而直接定義在內存的【方法區】,而且此時的靜態成員方法已經可以直接運行。可以通過類名直接調用,而此時沒有對象存在。 【沒有對象】
2. 爲什麼靜態成員方法不能使用非靜態成員
    非靜態成員變量和非靜態成員方法時需要類對象調用的,在靜態成員方法中,是可以通過類名直接執行的,而此時是 【沒有對象】
3. 爲什麼靜態成員方法不能使用this關鍵字
    this關鍵字表示的是調用當前方法的類對象,但是靜態成員方法可以通過類名調用,this不能代表類名,同時也是 【沒有對象】
4. 靜態成員方法可以使用其他靜態成員
    生命週期一致,調用方式一致


1.3 類變量和類方法

類變量 == >靜態成員變量
類方法 ==> 靜態成員方法
類成員 ==> 靜態成員變量和靜態成員方法

1.4 靜態代碼塊

static {
	// 靜態代碼塊
}

只要類文件加載,當前靜態代碼塊中的內容就一定會執行,並且有且只執行一次。
整個類的初始化過程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章