一、位置
被定義在一個類下,且被static修飾
二、結構
靜態內部類下可以定義靜態和非靜態的屬性和方法
三、靜態內部類訪問外部類
1.不能訪問外部類非靜態的屬性和方法
2.調用屬性【方法】方式:
2.1直接寫屬性名【調用方法名】-------本質還是第二種
2.1外部類.屬性名【方法名】
源碼:
class Outter { private static int b =3; public static void test(){ System.out.println("外部類靜態方法"); } static class Inner{ public void get(){ System.out.println(b);//可以訪問外部靜態屬性 test();//可以訪問外部類靜態方法 } } }
反編譯源碼:
class Outter { private static int b; public static void test() { System.out.println("\u5916\u90e8\u7c7b\u9759\u6001\u65b9\u6cd5"); } static { Outter.b = 3; } static class Inner { public void get() { System.out.println(Outter.b); Outter.test(); } } }
四、外部類訪問靜態內部類
class Outter { private static int b =3; public static void test(){ System.out.println("外部類靜態方法"); } static class Inner{ private int a = 1; private static int b = 2; public void get(){ System.out.println("get"); } public static void get2(){ System.out.println("get2"); } } public static void main(String[] args) { //靜態變量-方法 --方式一 System.out.println(Inner.b); Inner.get2(); //靜態變量-方法 --方式二 System.out.println(Outter.Inner.b); Outter.Inner.get2(); //非靜態--方式1 System.out.println(new Inner().a); new Inner().get(); //非靜態--方式2 System.out.println(new Outter.Inner().a); } }
以上是對靜態內部類的總結,有不對的地方請大家多多指點,大家共同進步!!!