2020久久超碰欧美精品最新亚洲欧美日韩久久精品,国产福利电影一区二区三区,亚洲欧美日韩一区在线观看,亚洲国产欧美日韩欧美特级,亚洲欧美日韩成人一区久久,欧美日韩精品一区二区三区不卡,国产欧美日韩va另类影音先锋,亚洲欧美日韩久久精品,亚洲欧美日韩国产成人精品影院,亚洲国产欧美日韩精品一区二区三区,欧美日韩国产成人高清视频,日韩久久精品国产免费观看频道,久久人人爽人人爽从片av高清,国产精品综合一区二区

首頁技術文章正文

怎樣使單個靜態變量被所有實例共享?

更新時間:2022-10-27 來源:黑馬程序員 瀏覽量:

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

1666857362740_91.png

靜態變量內存分配圖

從圖3-18可以看出,所有學生對象共享一個名稱為schoolName的變量。在一個Java類中,要實現這種功能可以使用static關鍵字來修飾成員變量,該變量被稱作靜態變量,它可以所有實例所共享。

靜態變量可以使用如下語法來訪問:

類名.變量名

了解了靜態變量的聲明和訪問方式后,接下來通過一個案例來實現靜態變量內存分配圖中所描述的情況,如下例所示。

Example12.java

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

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

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

public class Student {
    public void study() {
       static int num =10;            //這行代碼是非法的,編譯會報錯
    }
}





分享到:
在線咨詢 我要報名
和我們在線交談!