全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)技術(shù)文章正文

static關(guān)鍵字怎樣控制成員變量?

更新時(shí)間:2021-04-29 來(lái)源:黑馬程序員 瀏覽量:

學(xué)IT就到黑馬程序員


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

static關(guān)鍵字怎樣控制成員變量?

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

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

靜態(tài)變量可以使用如下語(yǔ)法來(lái)訪(fǎng)問(wèn):

類(lèi)名.變量名

了解了靜態(tài)變量的聲明和訪(fǎng)問(wèn)方式后,接下來(lái)通過(guò)一個(gè)案例來(lái)實(shí)現(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個(gè)學(xué)生對(duì)象
             Student stu2 = new Student();       // 創(chuàng)建第2個(gè)學(xué)生對(duì)象
             Student.schoolName = "清華大學(xué)";        // 為靜態(tài)變量賦值
             // 分別輸出兩個(gè)學(xué)生對(duì)象的信息
             System.out.println("我是" + stu1.schoolName+"的學(xué)生");    
             System.out.println("我是" + stu2.schoolName+"的學(xué)生"); 
         }
     }

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

static關(guān)鍵字怎樣控制成員變量?

圖2 運(yùn)行結(jié)果

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

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

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







猜你喜歡:

Java中String類(lèi)初始化的兩種方式?

49個(gè)Java學(xué)習(xí)中必備的關(guān)鍵字【Java基礎(chǔ)編程】

Java異常之throws關(guān)鍵字用法介紹    

Java中final關(guān)鍵字如何使用?

黑馬程序員高級(jí)java工程師培訓(xùn)

分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!