教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

使用static關(guān)鍵字如何定義成員變量?

更新時間:2021年04月29日17時27分 來源:傳智教育 瀏覽次數(shù):

傳智教育-一樣的教育,不一樣的品質(zhì)

在定義一個類時,只是在描述某類事物的特征和行為,并沒有產(chǎn)生具體的數(shù)據(jù)。只有通過new關(guān)鍵字創(chuàng)建該類的實例對象后,系統(tǒng)才會為每個對象分配內(nèi)存空間,存儲各自的數(shù)據(jù)。有時候,開發(fā)人員會希望某些特定的數(shù)據(jù)在內(nèi)存中只有一份,而且能夠被一個類的所有實例對象所共享。例如某個學(xué)校所有學(xué)生共享同一個學(xué)校名稱,此時完全不必在每個學(xué)生對象所占用的內(nèi)存空間中都聲明一個變量來表示學(xué)校名稱,而可以在對象以外的空間聲明一個表示學(xué)校名稱的變量,讓所有對象來共享。具體內(nèi)存中的分配情況如圖1所示。

圖1 靜態(tài)變量內(nèi)存分配圖

從圖1可以看出,所有學(xué)生對象共享一個名稱為schoolName的變量。在一個Java類中,要實現(xiàn)這種功能可以使用static關(guān)鍵字來修飾成員變量,該變量被稱作靜態(tài)變量,它可以被所有實例所共享。

靜態(tài)變量可以使用如下語法來訪問:

類名.變量名

了解了靜態(tài)變量的聲明和訪問方式后,接下來通過一個案例來實現(xiàn)圖3-18所描述的情況,如文件1所示。

文件1 Example12.java

     class Student {
         static String schoolName;  // 聲明靜態(tài)變量schoolName
     }
     public class Example12 {
         public static void main(String[] args) {
             Student stu1 = new Student();         // 創(chuàng)建第1個學(xué)生對象
             Student stu2 = new Student();       // 創(chuàng)建第2個學(xué)生對象
             Student.schoolName = "清華大學(xué)";        // 為靜態(tài)變量賦值
             // 分別輸出兩個學(xué)生對象的信息
             System.out.println("我是" + stu1.schoolName+"的學(xué)生");    
             System.out.println("我是" + stu2.schoolName+"的學(xué)生"); 
         }
     }

運行結(jié)果如圖2所示。

圖2 運行結(jié)果

文件2中,Student類中定義了一個靜態(tài)變量schoolName,用于表示學(xué)生所在的學(xué)校,它被所有的實例對象所共享。由于schoolName是靜態(tài)變量,因此可以直接使用Student.schoolName的方式進行調(diào)用,也可以通過Student的實例對象進行調(diào)用,如stu2.schoolName。在第8行代碼將變量schoolName賦值為“清華大學(xué)”后,學(xué)生對象stu1和stu2的schoolName屬性值均為“清華大學(xué)”。

注意:static關(guān)鍵字注意事項

static關(guān)鍵字只能用于修飾成員變量,不能用于修飾局部變量,否則編譯會報錯,例如下面的代碼是非法的。





猜你喜歡:

Java中有多少個關(guān)鍵字?使用關(guān)鍵字應(yīng)當(dāng)注意什么?

Java中this關(guān)鍵字的常見用法有哪些?

volatile關(guān)鍵字的作用,看完你明白了!

傳智教育java高級軟件工程師培訓(xùn)

0 分享到:
和我們在線交談!