静态内部类的加载方式
非内部类的静态成员变量会直接加载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | 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. } } <br><br>打印结果: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. } } <br><br>内部类只会在第一次使用时加载,不使用就不加载。<br>打印结果: 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() ; } } <br>打印结果: |
OuterClass static load.
flag:innerStatic
InnerStaticClass static load.
InnerStaticClass func load().
OuterClass static load.
flag:innerStatic
InnerStaticClass static load.
InnerStaticClass func load().
flag:inner
posted on 2017-05-05 12:21 leihupqrst 阅读(248) 评论(0) 编辑 收藏 举报
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步