今天我们先来一个小的Demo来了解类的加载顺序。

 1 public class ClassLoaderTest {
 2     public static void main(String[] args) {
 3         System.out.println("*******************测试类的加载顺序开始*******************");
 4         new SubClass();
 5         System.out.println("*******************测试类的加载顺序结束*******************");
 6         /**
 7          * 测试结果:
 8          * *******************测试类的加载顺序开始*******************
 9         ParentClass 静态代码块....
10         SubClass 静态代码块....
11         ParentClass 匿名内部类....
12         ParentClass 构造函数....
13         SubClass 匿名内部类....
14         SubClass 构造函数....
15          *******************测试类的加载顺序结束*******************
16          */
17     }
18     
19 
20 }
21 
22 
23 
24 class ParentClass{
25     ParentClass(){
26         System.out.println("ParentClass 构造函数....");
27     }
28     
29     static{
30         System.out.println("ParentClass 静态代码块....");
31     }
32     
33     {
34         System.out.println("ParentClass 匿名内部类....");
35     }
36     
37 }
38 
39 class SubClass extends ParentClass{
40     SubClass(){
41         System.out.println("SubClass 构造函数....");
42     }
43     
44     static{
45         System.out.println("SubClass 静态代码块....");
46     }
47     
48     {
49         System.out.println("SubClass 匿名内部类....");
50     }
51     
52 }

 由上测试结果可以得出结论:

9行10行对比说明:父类优先于子类加载,

11,12行对比说明:匿名内部类优先于构造函数

9,10 和11,12,13,14对比:说明静态代码块优先于类存在

总结以上:1.父类优先于子类加载,2.静态变量优先于类存在,3.匿名内部类优先于对象存在

 

posted on 2015-09-11 18:25  张释文  阅读(348)  评论(0)    收藏  举报