一、基礎概念 靜態關鍵字 static 是成員修飾符,直接用於修飾成員。 (一)特點: 1.被靜態修飾的成果,可以直接被類名所調用。 2.靜態成員優先於對象存在。 3.靜態成員隨著類的載入而載入。隨著類的消失而消失。靜態成員的生命周期很長。 (二)註意事項: 1.靜態方法只能訪問靜態成員,不能訪問非 ...
一、基礎概念
靜態關鍵字 static 是成員修飾符,直接用於修飾成員。
(一)特點:
1.被靜態修飾的成果,可以直接被類名所調用。
2.靜態成員優先於對象存在。
3.靜態成員隨著類的載入而載入。隨著類的消失而消失。靜態成員的生命周期很長。
(二)註意事項:
1.靜態方法只能訪問靜態成員,不能訪問非靜態成員。
2.靜態方法中不能出現this或者super關鍵字。
3.主函數是靜態的。
(三)什麼時候用:
1.成員變數:如果數據在所有對象中都是一樣的。直接用靜態修飾。
2.成員函數:如果函數沒有訪問過對象中的屬性數據,那麼該函數就是靜態的。
(四)成員變數和靜態變數的區別:
1.名稱:成員變數也叫實例變數。靜態變數也叫類變數。
2.記憶體存儲:成員變數存儲到堆記憶體的對象中。靜態變數存儲到方法區的靜態區中。
3.生命周期:成員變數隨著對象的出現而出現,隨著對象的消失而消失。靜態變數隨著類的載入而載入。隨著類的消失而消失。
(五)靜態代碼塊:
1.隨著類的載入而執行,而且只執行一次。
2.給類進行初始化。
3.類不需要創建對象,但是需要初始化。這是將部分代碼存儲到靜態代碼塊中。
二、實例代碼
1 class Person 2 { 3 private String name; 4 private int age; 5 static String country = "CN";//定義靜態變數country 6 7 Person(String name,int age) 8 { 9 this.name = name; 10 this.age = age; 11 } 12 public void show() 13 { 14 System.out.println("name="+name+",age"+age); 15 } 16 //既然sleep函數沒有訪問到對象中的屬性,可以用static修飾該方法。(節約記憶體的使用) 17 public static void sleep() 18 { 19 System.out.println("sleep......"); 20 21 } 22 23 static//靜態代碼塊 24 { 25 System.out.println("static......"); 26 } 27 28 static void show1() 29 { 30 System.out.println(country);//直接訪問靜態變數 31 } 32 static void show2() 33 { 34 System.out.println(Person.country);//通過類名的方式訪問靜態變數 35 } 36 37 } 38 39 class StaticDemo 40 { 41 public static void main(String[] args) 42 { 43 Person p = new Person("xiaoming",20); 44 Person.sleep();//通過類名的方式調用靜態sleep函數 45 Person.sleep(); 46 System.out.println(Person.country);//通過類名訪問,輸出靜態變數country的值 47 Person.show1(); 48 Person.show2(); 49 } 50 }
三、代碼運行