黑马程序员——Java中对象初始化的顺序与原理 总结

来源:互联网 发布:青岛seo排名工具 编辑:程序博客网 时间:2024/06/05 02:49

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------



顺序: 
(有子父类继承关系的情况下)
成员变量默认初始化--->父类构造器初始化--->成员变量显示初始化--->子类构造代码块初始化---->子类构造器初始化


源代码:

Fu(){System.out.println("fu....run");show();}void show(){System.out.println("最上面的show()");}}class Zi extends Fu{int num=9;//子类构造代码块{System.out.println("子代码快"+num);//在子类代码块中为成员变量赋值为10num=10;}//子类构造器Zi(){super();//隐式语句,指向父类System.out.println("子类构造器中的"+num);}void show(){System.out.println("最下下面的show()"+num);}}class ChushiDemo{public static void main(String[]args){new Zi();}}
输出结果为:
---------- java -----fu....run最下下面的show()0子代码快9子类构造器中的10---------- java -----
明确对象初始化的顺序与原理:


情况一:
[有继承关系情况下]


new对象,即刻成员变量默认(隐式)初始化


(num被系统赋予0),然后,父类构造器初始化,再然后调用show()


方法,此刻父类构造器完成;然后成员变量显示初始化(num被赋予9);


再然后,构造代码块初始化,再然后子类构造器完成初始化.


情况二:
[无继承关系情况下]  


new对象,即刻成员变量默认(隐式)初始化


(num被系统赋予0),然后成员变量显示初始化(num被赋予9);再然后


构造代码初始化,再然后,构造器初始化.


以上两种情况区别就在于: super();语句.

0 0
原创粉丝点击