更新時間:2021-04-29 來源:黑馬程序員 瀏覽量:
在定義一個類時,只是在描述某類事物的特征和行為,并沒有產生具體的數據。只有通過new關鍵字創(chuàng)建該類的實例對象后,系統(tǒng)才會為每個對象分配內存空間,存儲各自的數據。有時候,開發(fā)人員會希望某些特定的數據在內存中只有一份,而且能夠被一個類的所有實例對象所共享。例如某個學校所有學生共享同一個學校名稱,此時完全不必在每個學生對象所占用的內存空間中都聲明一個變量來表示學校名稱,而可以在對象以外的空間聲明一個表示學校名稱的變量,讓所有對象來共享。具體內存中的分配情況如圖1所示。
圖1 靜態(tài)變量內存分配圖
從圖1可以看出,所有學生對象共享一個名稱為schoolName的變量。在一個Java類中,要實現這種功能可以使用static關鍵字來修飾成員變量,該變量被稱作靜態(tài)變量,它可以被所有實例所共享。
靜態(tài)變量可以使用如下語法來訪問:
類名.變量名
了解了靜態(tài)變量的聲明和訪問方式后,接下來通過一個案例來實現圖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個學生對象 Student stu2 = new Student(); // 創(chuàng)建第2個學生對象 Student.schoolName = "清華大學"; // 為靜態(tài)變量賦值 // 分別輸出兩個學生對象的信息 System.out.println("我是" + stu1.schoolName+"的學生"); System.out.println("我是" + stu2.schoolName+"的學生"); } }
運行結果如圖2所示。
圖2 運行結果
文件2中,Student類中定義了一個靜態(tài)變量schoolName,用于表示學生所在的學校,它被所有的實例對象所共享。由于schoolName是靜態(tài)變量,因此可以直接使用Student.schoolName的方式進行調用,也可以通過Student的實例對象進行調用,如stu2.schoolName。在第8行代碼將變量schoolName賦值為“清華大學”后,學生對象stu1和stu2的schoolName屬性值均為“清華大學”。
注意:static關鍵字注意事項
static關鍵字只能用于修飾成員變量,不能用于修飾局部變量,否則編譯會報錯,例如下面的代碼是非法的。
猜你喜歡: