JAVA面向對象學習之static關鍵字、成員變量與靜態變量的差異分析

JAVA面向對象學習之static

17.1 static關鍵字及其內存圖

1、static關鍵字表示靜態,使用static關鍵字後,賦值後靜態保存,比如字段"國籍",在p1賦值了"中國",在p2中,"國籍"字段默認就是p1中賦值的。

案例演示如圖1和2所示:

JAVA面向對象學習之static關鍵字、成員變量與靜態變量的差異分析

圖1

JAVA面向對象學習之static關鍵字、成員變量與靜態變量的差異分析

圖2

2 static關鍵字的特點

2.1、隨著類的加載而加載;

2.2、優先於對象存在;

2.3、被類的所有對象共享(靜態):共性用靜態,特性用非靜態;

2.4、可以通過類名調用:它本身也可通過對象名調用,推薦使用類名調用。靜態修飾的內容一般我們稱其為:與類相關的類成員。

3、static的注意事項:

3.1在靜態方法中是沒有this關鍵字的

a.靜態是隨著類的加載而加載,this是隨著對象的創建而存在;

b.靜態比對象先存在。

3.2靜態方法只能訪問靜態的成員變量和靜態的成員方法:

a.靜態方法:

成員變量:只能訪問靜態變量;

成員方法:只能訪問靜態成員方法。

b.非靜態方法:

成員變量:可以是靜態的,也可以是非靜態的;

成員方法:可是靜態的成員方法,也可以是非靜態的成員方法。

也就是說,靜態只能訪問靜態。

程序代碼演示如圖3所示:

JAVA面向對象學習之static關鍵字、成員變量與靜態變量的差異分析

圖3

4、成員變量和靜態變量的區別:靜態變量也叫類變量,成員變量也叫對象變量。

4.1所屬不同:

靜態變量屬於類,所以也稱為類變量;

成員變量屬於對象,所以也稱為實例變量(對象變量)。

4.2 內存中的位置不同:

靜態變量存儲於方法區的靜態區;

成員變量存儲於堆內存。

4.3 內存中出現的時間也不同:

靜態變量隨著類的加載而加載,隨著類的消失而消失;

成員變量隨著對象的創建而存在,隨著對象的消失而消失。

4.4 調用不同:

靜態變量可以通過類名調用,也可以通過對象調用;

成員變量只能通過對象名調用。

感謝支持,我是小區日記本,每天根據小編的學習,持續分享學習的筆記與心得。

案例代碼截圖僅包含部分,小編已整理了全部代碼並分享,可免費領取,私信回覆2個字:代碼


分享到:


相關文章: