成員變量與局部變量的區別,實例變量與靜態變量的區別

成員變量被分爲類變量和實例變量兩種,簡單來說,定義成員變量時沒有 static 修飾符的就是實例變量,反之,有static修飾符的就是靜態變量。
而什麼是局部變量呢?局部變量就是在一個方法內或一個代碼塊內有效的變量,出了這個方法或代碼塊就失效了的變量。
接下來談談具體的。

  • 什麼時候成員變量聲明爲實例變量?
  • 所有對象都有這個屬性,但是這個屬性會隨着對象的變化而變化
    ——————————————————————————
  • 什麼時候成員變量聲明爲靜態變量?
  • 所有對象都有這個屬性,但是這個屬性不隨着對象的變化而變化

同時,靜態變量是在類加載的時候初始化,不需要創建對象,內存就在方法區內被開闢了,方法區內主要存儲已被虛擬機加載的類信息、常量、靜態變量。靜態變量通過“類名.”的方式訪問,雖然也可以通過“引用.”的方式訪問,但當引用是個空指針時依舊可以訪問,因爲訪問靜態變量與引用壓根沒關係。
其中, 靜態變量從該類的準備階段起開始存在,直到系統完全銷燬這個類,類變量的作用域與這個類的生存範圍相同;而實例變量則從該類的實例被創建起開始存在,知道系統完全銷燬這個實例,實例變量的作用域與對應實例的生存範圍相同。
當然,對於成員變量來說,如果沒有手動賦值,系統會自動分配默認值。這裏列舉各類型的默認值如下。
byte、short、int、long------>0
float、double------>0
boolean------>false
char------>‘\u0000’(空字符)
String、引用數據類型------>null
String是Java寫好的一個類型,也是在堆中存儲的,不用new也會創建出對象。
順便提一下內存存儲機制,局部變量是存儲在棧中的,而這個局部變量如果是基本數據類型,就不必再多說了,如果是引用數據類型,那麼棧中存儲的就是在堆內存中開闢的實例的地址,用C++的話來說就像是指針嘛。而對於實例而言,他的實例變量存儲在他所對應的這個堆內存之中。

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