百度广告
将类的成员赋予初值(原始类型的成员的值为规定值,例如int型为0,float型为0.0f,boolean型为false;对象类型的初始值为null)
执行显式的super()调用(可以是其它带参数的super()调用)或者隐式的super()调用(缺省构造方法),此步骤又进入一个父类的构造过程并一直上推至Object对象的构造。
执行构造方法中的其它语句。
如果父类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块
将类的成员赋予初值(原始类型的成员的值为规定值,例如int型为0,float型为0.0f,boolean型为false;对象类型的初始值为null)
父类的构造方法执行完成后,执行类申明中的成员赋值和初始化块。
最终的简化顺序版本是:
父类的静态成员赋值和静态块
父类的构造方法
父类的构造方法中的其它语句
子类的构造方法中的其它语句
针对留言中提到的那个文章中的问题发现这个顺序也是有不足的情况,这个顺序是一般的顺序,但是有可能被打破,留言中的那篇文章就是一个例子,因为在执行静态初始化块的时候先执行了类的构造,打破了这个一般顺序。所以这个顺序有个前提就是静态赋值和初始化块中没有对本类的实例化语句。
public class CachingEnumResolver {
/*MSGCODE->Category内存索引*/
CODE_MAP_CACHE = new HashMap();
CODE_MAP_CACHE.put("0","北京市");
//单态实例 一切问题皆由此行引起
编辑推荐:
![](http://m.zuixu.com/static/img/neirong2.jpg)
温馨提示:因考试政策、内容不断变化与调整,长理培训网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准! (责任编辑:长理培训)
点击加载更多评论>>