静态内部类的加载方式

非内部类的静态成员变量会直接加载

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   leihupqrst  阅读(248)  评论(0编辑  收藏  举报

努力加载评论中...

导航

点击右上角即可分享
微信分享提示