之前一直在微軟.Net平台下開發,在C#中是不能執行個體化的,而且它的所有成員都要是靜態。我們一般把靜態類用作工具類,不需要執行個體化,直接使用它的屬性與方法,整個域中靜態類是唯一的。
開始用Java後發現Java的靜態類一般使用在某個類的內容,簡稱靜態內部類。而且這種類可以像非靜態類一樣包含各種非靜態成員,同時可以執行個體化。直接顛覆了我對靜態類的認知。
下面我對Java的靜態內部類和非靜態內部類進行對比:
public class outClass { public static class innerClass{ public innerClass(){ System.out.println("innerClass"); } } public static void main(String[] args) { //outClass a = new outClass(); innerClass b = new innerClass(); innerClass c = new innerClass(); } }
public class outClass { public class innerClass{ public innerClass(){ System.out.println("innerClass"); } } public static void main(String[] args) { outClass a = new outClass(); innerClass b = a.new innerClass(); innerClass c = a.new innerClass(); } }
總結:
通過代碼我們發現,非靜態內部類是附屬在外部類對象上的,需要先執行個體化一個外部類的對象,通過外部類對象才能執行個體化非靜態內部類;而靜態內部類可以看做是直接附屬在外部類上的,這個靜態代表附屬體是外部類,而不是外部類執行個體;外部類在進程中是唯一的,而靜態內部類不需要唯一,可以產生多個執行個體。