[javase學習筆記]-7.9 成員變數與靜態變數的區別

來源:互聯網
上載者:User

[javase學習筆記]-7.9 成員變數與靜態變數的區別

這一節我們看一看成員變數與靜態變數的區別所在。

什麼是靜態變數呢?我們上節用static關鍵字時就提到了靜態變數。也就是說用static關鍵字修飾的變數就是靜態變數。

我們在6.4節學習了成員變數與局部變數的區別,這一節我們重點看看成員變數與靜態變數之間的區別。

我們看代碼:

class Person{String name;//姓名,這是一個成員變數static String country = "中國";//國籍,這是一個靜態變數public void printInfo(){System.out.println(name+":"+country);}}

上面的代碼中我們可以看到變數name是一個成員變數,而country是一個靜態變數,用static關鍵字修飾。

這裡我們通過上一節static關鍵字的特點和成員變數的特點我們總結四個方面的區別:

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.兩個變數的儲存位置不同:

成員變數:儲存在堆記憶體中的對象中,所以也叫對象的特有資料。

靜態變數:儲存在方法區(共用資料區)的靜態區中,所以也叫類的共用資料。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.