子父类 构造代码块 静态代码块 初始化过程

 1 class Fu{
 2     Fu(){//调用show方法  被子类重写  num=0;
 3         System.out.println("Fu constructor.....");
 4         show();//实际是子类方法//zi..show 0
 5     }
 6     static{
 7         
 8         System.out.println("fu静态代码块");
 9     }
10     {
11         System.out.println("FU构造代码块");
12     }
13     void show(){
14         System.out.println("Fu show---");
15     }
16 }
17 class Zi extends Fu{
18     int num = 9;
19     static{//Jvm加载时运行,在main之前
20         int a=2;
21         System.out.println("a="+a);
22     }
23     {//constrcuctor  9
24         System.out.println("constrcuctor......"+num);
25         num=10;//   改变num值 10
26     }
27     Zi(){//起始
28         //super();默认是有super的  先父类的构造函数
29                 //显示初始化   num=9,然后是构造代码块初始化
30         System.out.println("Zi Constructor......"+num);//Zi  Constructor......  num=10
31     }
32     void show(){
33         System.out.println("Zi show---"+num);
34     }
35 }
运行结果:
1 fu静态代码块
2 a=2
3 FU构造代码块
4 Fu constructor.....
5 Zi show---0
6 constrcuctor......9
7 Zi Constructor......10

静态代码块会随着类的加载就加载,构造代码块在对象初始化之前运行

1,运行父类中的静态代码块
2,运行子类中的静态代码块
3,通过new子类对象 开始初始化过程,首先不指定则调用super();
4,super初始化前会先运行父类的构造代码块
5,然后开始子类对应的父类构造函数初始化,若子类重写了父类方法 ,父类会被覆盖
6,父类初始化完后,会运行子类中的构造代码块
7,最后进行子类构造函数初始化。


 

posted @ 2015-08-10 20:41  凤栖梧桐镇  阅读(643)  评论(0编辑  收藏  举报