使用static關鍵字修飾的變量、常量和方法分別被稱做靜態變量、靜態常量和靜態方法,也被稱做類的靜態成員this
使用static修飾過的類變量稱爲靜態變量spa
該變量須要使用類名.變量名進行調用,不能使用對象名/this進行調用code
在類方法中不能定義與靜態變量同名的局部變量對象
1 package mingri.chapter_6; 2 3 public class Pool { 4 5 public static int water = 0; // 定義一個靜態變量 6 7 public void outlet() { 8 // String water = ""; // 在類方法中,不能定義與靜態變量同名的變量名 9 if (water >= 2) { // 在類方法中不能使用 this.water 進行調用,只能使用變量名進行調用 10 water -= 2; 11 } else { 12 water = 0; 13 } 14 } 15 16 public void inlet() { 17 water += 3; 18 } 19 20 public static void main(String[] args) { 21 Pool pool = new Pool(); 22 System.out.println("水池的水量:" + Pool.water); // 只能經過類名.靜態變量名進行訪問 23 24 pool.inlet(); 25 pool.inlet(); 26 27 System.out.println("水池的水量:" + Pool.water); 28 System.out.println("水池放水一次"); 29 pool.outlet(); 30 System.out.println("水池的水量:" + Pool.water); 31 } 32 }
靜態方法與靜態變量相似,使用類名.靜態方法名便可調用blog
1 package mingri.chapter_6; 2 3 public class Pool2 { 4 5 // 定義靜態變量 6 public static int water = 0; 7 8 // 定義靜態方法 9 public static void outlet() { 10 if (water > 2) { 11 water -= 2; 12 } else { 13 water = 0; 14 } 15 } 16 17 // 定義靜態方法 18 public static void inlet() { 19 water += 3; 20 } 21 22 public static void main(String[] args) { 23 System.out.println("水池的水量:" + Pool2.water); // 調用靜態變量 24 System.out.println("水池注水兩次。"); 25 26 Pool2.inlet(); // 調用靜態方法 27 Pool2.inlet(); 28 29 System.out.println("水池的水量:" + Pool2.water); // 調用靜態變量 30 System.out.println("水池放水一次。"); 31 32 Pool2.outlet(); // 調用靜態方法 33 34 System.out.println("水池的水量:" + Pool2.water); // 調用靜態變量 35 } 36 }
在類的成員方法以外,用static修飾代碼區域能夠稱之爲靜態代碼塊。定義一塊靜態代碼塊,能夠完成類的初始化操做,在類聲明時就會運行class
語法以下:變量
1 package mingri.chapter_6; 2 3 public class StaticTest { 4 5 // 靜態代碼塊 6 static { 7 System.out.println("靜態代碼塊"); 8 } 9 10 public static void main(String[] args) { 11 StaticTest st; 12 System.out.println("main主方法"); 13 } 14 }
代碼塊的執行順序語法
1 package mingri.chapter_6; 2 3 public class StaticTest { 4 5 static String name; 6 7 // 靜態代碼塊 8 static { 9 System.out.println(name + "靜態代碼塊"); 10 } 11 12 public StaticTest(String str){ 13 name = str; 14 System.out.println(name + "構造方法"); 15 16 } 17 18 public void method() { 19 System.out.println(name + "成員方法"); 20 } 21 22 public static void main(String[] args) { 23 StaticTest s1; // 聲明變量的時候就已經運行靜態代碼塊了 24 StaticTest s2 = new StaticTest("s2"); 25 StaticTest s3 = new StaticTest("s3"); 26 s3.method(); 27 System.out.println("main主方法"); 28 } 29 } 30 31 /* 32 * 輸出結果 33 null靜態代碼塊 34 s2構造方法 35 s3構造方法 36 s3成員方法 37 main主方法 38 * */