非內部類的靜態成員變量會直接加載java
public class OuterClass { static{ System.out.println("OuterClass static load."); } public OuterClass() { System.out.println("flag"); } public OuterClass(String flag) { System.out.println("flag:"+flag); } class InnerClass { //private static String te = ""; /*static{ System.out.println("InnerClass static load."); }*/ private OuterClass out = new OuterClass("inner"); } static class InnerStaticClass { private static OuterClass out = new OuterClass("innerStatic"); static{ System.out.println("InnerStaticClass static load."); } private static void load() { System.out.println("InnerStaticClass func load()."); } } public static OuterClass getInstatnce() { return OuterClass.InnerStaticClass.out; } public static void main(String[] args) { // OuterClass.InnerStaticClass.load(); // OuterClass out = OuterClass.InnerStaticClass.out; // OuterClass.InnerClass innerClass = out.new InnerClass() ; //OuterClass.InnerStaticClass.out. } }
打印結果:OuterClass static load.
public class OuterClass { static{ System.out.println("OuterClass static load."); } public OuterClass() { System.out.println("flag"); } public OuterClass(String flag) { System.out.println("flag:"+flag); } class InnerClass { //private static String te = ""; /*static{ System.out.println("InnerClass static load."); }*/ private OuterClass out = new OuterClass("inner"); } static class InnerStaticClass { private static OuterClass out = new OuterClass("innerStatic"); static{ System.out.println("InnerStaticClass static load."); } private static void load() { System.out.println("InnerStaticClass func load()."); } } public static OuterClass getInstatnce() { return OuterClass.InnerStaticClass.out; } public static void main(String[] args) { OuterClass.InnerStaticClass.load(); // OuterClass out = OuterClass.InnerStaticClass.out; // OuterClass.InnerClass innerClass = out.new InnerClass() ; //OuterClass.InnerStaticClass.out. } }
內部類只會在第一次使用時加載,不使用就不加載。
打印結果:
OuterClass static load.
flag:innerStatic
InnerStaticClass static load.
InnerStaticClass func load().blog
public class OuterClass { static{ System.out.println("OuterClass static load."); } public OuterClass() { System.out.println("flag"); } public OuterClass(String flag) { System.out.println("flag:"+flag); } class InnerClass { //private static String te = ""; /*static{ System.out.println("InnerClass static load."); }*/ private OuterClass out = new OuterClass("inner"); } static class InnerStaticClass { private static OuterClass out = new OuterClass("innerStatic"); static{ System.out.println("InnerStaticClass static load."); } private static void load() { System.out.println("InnerStaticClass func load()."); } } public static OuterClass getInstatnce() { return OuterClass.InnerStaticClass.out; } public static void main(String[] args) { OuterClass.InnerStaticClass.load(); OuterClass out = OuterClass.InnerStaticClass.out; OuterClass.InnerClass innerClass = out.new InnerClass() ; } }
打印結果:
OuterClass static load.
flag:innerStatic
InnerStaticClass static load.
InnerStaticClass func load().
flag:innerget