靜態內部類:
1、用static修飾的內部類,稱為靜態內部類,完全屬於外部類本身,不屬於外部類某一個對象
2、static關鍵字的作用是把修飾的成員變成類相關,而不是實例相關
3、靜態內部類可以包含靜態成員,也可以包含非靜態成員,但是在非靜態內部類中不可以聲明靜態成員。
4、靜態類內部不可以訪問外部類的實例成員,只能訪問外部類的類成員,即使是靜態內部類的實例方法也不能訪問外部類的實例成員,只能訪問外部類的靜態成員
5、外部類不可以定義為靜態類,Java中靜態類只有一種,那就是靜態內部類,頂級類不能用static 修飾
6、外部類如何調用靜態內部類中的屬性和方法
1)外部類可以通過創建靜態內部類實例的方法來調用靜態內部類的非靜態屬性和方法
2)外部類可以直接通過“ 外部類.內部類.屬性(方法)” 的方式直接調用靜態內部類中的靜態屬性和方法
7、如何創建靜態內部類實例
1)在非外部類中:外部類名.內部類名 name = new 外部類名.內部類名();
2)在外部類中:內部類名 name = new 內部類名();
代碼例子:
public class StaticDome01 { private int a = 10;//實例成員 private static int b = 20;//類成員 static class StaticClass{ public static int c = 30; public int d = 40; //類方法 public static void print(){ //下面代碼會報錯,靜態內部類不能訪問外部類實例成員 //System.out.println(a); //靜態內部類只可以訪問外部類類成員 System.out.println("靜態內部類的靜態方法,調用外部類類成員b"); System.out.println("外部類類成員b="+b); } private void Syso() { // TODO Auto-generated method stub } //實例方法 public void print01(){ //靜態內部內所處的類中的方法,調用靜態內部類的實例方法,屬於外部類中調用靜態內部類的實例方法 System.out.println("靜態內部類的實例方法,調用靜態內部類的實例方法"); StaticClass sc = new StaticClass(); sc.print(); } } }
測試類:
public class Text { public static void main(String[] args) { /* * 要想訪問靜態內部類的實例成員,需先創建實例對象,才可以調用,因為實例成員是屬於實例的, 創建方法:外部類名.內部類名 name = new * 外部類名.內部類名() * 通過“ 外部類.內部類.屬性(方法)” 的方式直接調用靜態內部類中的靜態屬性和方法 */ StaticDome01.StaticClass st = new StaticDome01.StaticClass(); //訪問靜態內部類的實例方法 st.print01(); //訪問靜態內部類的實例成員 int i = st.d; System.out.println("非外部類調用靜態內部類的實例成員d = "+i); //訪問靜態內部類的類成員 int j = StaticDome01.StaticClass.c; System.out.println("非外部類調用靜態內部類的類成員C = "+j); //訪問靜態內部類的類方法 System.out.println("訪問靜態內部類的類方法:"); StaticDome01.StaticClass.print(); } }
運行結果: