Java語言容許在類中再定義類,這種在其它類內部定義的類就叫內部類。html
有static關鍵字修飾的內部類。python
好比:Pattern類中的Node類。測試
public class Outer { private static String s1 = "this is s1 in Outer"; private static String s2 = "this is s2 in Outer"; public void method1() { // 外部類可經過內部類的對象調用內部類的私有成員變量或方法 System.out.println(new Inner().s1); System.out.println(new Inner().method2()); } private static String method2() { return "this is method2 in Outer"; } // 內部靜態類 public static class Inner { private String s1 = "this is s1 in Inner"; private static String s3 = "this is s3 in Inner"; public void method1() { // 內部類可直接訪問外部類的私有靜態成員變量或方法 System.out.println(s2); // 內部類和外部類有同名變量和方法時 System.out.println(s1); System.out.println(Outer.s1); System.out.println(method2()); System.out.println(Outer.method2()); } private String method2() { return "this is method2 in Inner"; } } }
------外部類測試--------
this is s1 in Inner this is method2 in Inner ------內部類測試-------- this is s2 in Outer this is s1 in Inner this is s1 in Outer this is method2 in Inner this is method2 in Outer
一、建立靜態內部類方式:Outer.Inner inner = new Outer.Inner();靜態內部類不依賴於外部類。this
二、外部類可經過內部類的對象調用內部類的私有成員變量或方法。spa
三、靜態內部類訪問的外部類成員變量或方法爲何不能是非靜態的,而成員內部類能夠?htm
成員內部類中有外部類的引用,因此成員內部類對外部類的私有非靜態變量和方法能夠隨意訪問。對象
從靜態內部類它不存在對外部類的引用,因此僅能訪問外部類的靜態成員變量或方法。blog
四、靜態內部類中可定義靜態的成員變量和方法。io
一、建立靜態內部類方式:Outer.Inner inner = new Outer.Inner();靜態內部類不依賴於外部類。class
二、外部類可經過內部類的對象調用內部類的私有成員變量或方法。
三、靜態內部類訪問外部類的靜態成員變量或方法必須是靜態的。
四、靜態內部類中可定義靜態的成員變量和方法。
五、外部類能夠建立靜態內部類的實例,即便是私有的;並可經過內部類的實例訪問內部類的成員變量和方法,即便是私有的。
1)首先,用內部類是由於內部類與所在外部類有必定的關係,每每只有該外部類調用此內部類。因此沒有必要專門用一個Java文件存放這個類。
2)靜態都是用來修飾類的內部成員的。好比靜態方法,靜態成員變量,靜態常量。它惟一的做用就是隨着類的加載(而不是隨着對象的產生)而產生,以至能夠用類名+靜態成員名直接得到。
這樣靜態內部類就能夠理解了,由於這個類沒有必要單獨存放一個文件,它通常來講只被所在外部類使用。而且它能夠直接被用 外部類名+內部類名 得到。
3)普通內部類把它理解爲與外部類綁定了,建立普通內部類對象必定要經過外部類的對象new才行。而靜態內部類是不須要的
#參考
https://www.cnblogs.com/SQP51312/p/6102620.html
https://zhidao.baidu.com/question/149873207.html