[javase學習筆記]-8.2 成員變量與靜態變量的差別
阿新 • • 發佈:2017-07-24
key [] cte 執行 div 學習 article alt art
結果:
這一節我們看一看成員變量與靜態變量的差別所在。
什麽是靜態變量呢?我們上節用statickeyword時就提到了靜態變量。也就是說用statickeyword修飾的變量就是靜態變量。
我們在6.4節學習了成員變量與局部變量的差別。這一節我們重點看看成員變量與靜態變量之間的差別。
我們看代碼:
class Person { String name;//姓名,這是一個成員變量 static String country = "中國";//國籍,這是一個靜態變量 public void printInfo() { System.out.println(name+":"+country); } }
上面的代碼中我們能夠看到變量name是一個成員變量,而country是一個靜態變量,用statickeyword修飾。
這裏我們通過上一節statickeyword的特點和成員變量的特點我們總結四個方面的差別:
1.兩個變量的生命周期不同:
成員變量:隨著對象的創建而存在,隨著對象的被回收而釋放。
靜態變量:隨著類的載入而存在。隨著類的消失而消失。
那麽類什麽時候消失呢?普通情況下,虛擬機結束了,類就結束了。當然這僅僅是說普通情況下。
2.兩個變量的調用方式不同:
我們來看一個上面代碼的測試:
class StaticTest { public static void main(String[] args) { Person p = new Person(); p.name = "小強"; String name = Person.name; System.out.println(p.country+"--"+Person.country); } }
我們能夠看到直接用類名來調用成員變量就會出現“無法從靜態上下文中訪問非靜態變量”的錯誤。
當我們把這名話凝視之後再來執行:
class StaticTest { public static void main(String[] args) { Person p = new Person(); p.name = "小強"; //String name = Person.name; System.out.println(p.country+"--"+Person.country); } }結果:
程序正常執行並合法訪問,所以我們能夠總結出以下的差別:
成員變量:僅僅能被對象調用。
靜態變量:既可被對象調用。也可被類調用。
上一節我們就已經學習了static修飾的成員能夠直接用類名調用。
3.兩個變量的別名不同:
成員變量:又稱為實例變量。
靜態變量:又稱為類變量。
4.兩個變量的存儲位置不同:
成員變量:存儲在堆內存中的對象中,所以也叫對象的特有數據。
靜態變量:存儲在方法區(共享數據區)的靜態區中,所以也叫類的共享數據。
[javase學習筆記]-8.2 成員變量與靜態變量的差別