Java中的靜態內部類:在定義的內部類前加static修飾符,此時的內部類就是靜態內部類。通過一個例子來了解靜態內部類都有哪些特點。
1 public class Outer { 2 //定義一個實例變量和一個靜態變量 3 private int a; 4 private static int b; 5 //定義一個靜態方法和一個非靜態方法 6 public static void say(){} 7 public void test(){ 8 //在外部類中調用內部類的屬性和方法 9 Outer.Inner.c = 1; //可以通過靜態內部類的全類名來調用靜態內部類的靜態屬性(外部類名.靜態內部類名.屬性) 10 Outer.Inner.go(); //可以通過靜態內部類的全類名來調用靜態內部類的靜態方法(外部類名.靜態內部類名.方法) 11 //Outer.Inner.walk(); //不能通過類靜態內部類的全類名來調用內部類的非靜態屬性和方法 12 Inner inner = new Inner(); 13 inner.d = 1; 14 inner.walk(); //可以通過創建內部類實例來調用靜態內部類的非靜態屬性和方法 15 } 16 //靜態內部類 17 public static class Inner{ 18 //在靜態內部類中定義一個靜態變量和一個實例變量 19 static int c; 20 int d; 21 //定義一個匿名代碼塊和一個靜態代碼塊 22 {} 23 static{} 24 //定義一個靜態方法和一個普通方法 25 public static void go(){} 26 public void walk(){ 27 //在靜態內部類中調用外部類的屬性和方法 28 int f = b; //可以直接調用外部類的靜態屬性 29 say(); //可以直接調用外部類的靜態方法 30 //int e = a; 直接調用外部類的非靜態屬性出錯編譯出錯 31 //test(); 直接調用外部類的非靜態方法時編譯出錯 32 Outer outer = new Outer(); 33 int e = outer.a; //可以通過創建外部類實例來調用外部類的非靜態屬性 34 outer.test(); //可以通過創建外部類實例來調用外部類的非靜態方法 35 } 36 } 37 }
總結:1、靜態內部類中可以寫哪些內容
1)匿名代碼塊
2)靜態代碼塊
3)靜態變量和非靜態變量
4)靜態方法和非靜態方法
注意:不能在靜態內部類中寫抽象方法
2、外部類如何調用靜態內部類中的屬性和方法
1)外部類可以通過創建靜態內部類實例的方法來調用靜態內部類的非靜態屬性和方法
2)外部類可以直接通過“ 外部類.內部類.屬性(方法)” 的方式直接調用靜態內部類中的靜態屬性和方法
3、靜態內部類如何調用外部類的屬性和方法
1)靜態內部類可以直接調用外部類的靜態屬性和方法
2)靜態內部類可以通過創建外部類實例的方法調用外部類的非靜態屬性和方法
4、如何創建靜態內部類實例
1)在非外部類中:外部類名.內部類名 name = new 外部類名.內部類名();
2)在外部類中:內部類名 name = new 內部類名();