更新時(shí)間:2022-10-27 來源:黑馬程序員 瀏覽量:
靜態(tài)變量內(nèi)存分配圖
從圖3-18可以看出,所有學(xué)生對象共享一個(gè)名稱為schoolName的變量。在一個(gè)Java類中,要實(shí)現(xiàn)這種功能可以使用static關(guān)鍵字來修飾成員變量,該變量被稱作靜態(tài)變量,它可以所有實(shí)例所共享。
靜態(tài)變量可以使用如下語法來訪問:
類名.變量名
了解了靜態(tài)變量的聲明和訪問方式后,接下來通過一個(gè)案例來實(shí)現(xiàn)靜態(tài)變量內(nèi)存分配圖中所描述的情況,如下例所示。
Example12.java
class Student { static String schoolName; //聲明靜態(tài)變量schoolName } public class Examplel2 { public static void main(String[] args) { Student stul =new Student (); //創(chuàng)建第1個(gè)學(xué)生對象 Student stu2 =new Student (); //創(chuàng)建第2個(gè)學(xué)生對象 Student.schoolName="清華大學(xué)"; //為靜態(tài)變量賦值 //分別輸出兩個(gè)學(xué)生對象的信息 System.out.println("我是"+stul.schoolName+"的學(xué)生"); System.out.println("我是"+stu2.schoolName+"的學(xué)生"); } }
Student類中定義了一個(gè)靜態(tài)變量schoolName,用于表示學(xué)生所在的學(xué)校,它被所有的實(shí)例對象所共享。由于schoolName是靜態(tài)變量,因此可以直接使用Student.schoolName的方式進(jìn)行調(diào)用,也可以通過Student的實(shí)例對象進(jìn)行調(diào)用,如 stu2.schoolName。第8行代碼將變量schoolName賦值為“清華大學(xué)”后,學(xué)生對象stul和stu2的 schoolName 屬性值均為“清華大學(xué)”。
需要注意的是static關(guān)鍵字只能用于修飾成員變量,不能用于修飾局部變量,否則編譯會報(bào)錯(cuò),例如下面的代碼是非法的。
public class Student { public void study() { static int num =10; //這行代碼是非法的,編譯會報(bào)錯(cuò) } }