答案(++++是我自己加的,为了看清两个new的不同):
A的静态属性初始化
A的静态块
B的静态属性初始化
B的静态块
A的实例属性初始化
A的实例块
A的构造方法
B的实例属性初始化
B的实例块
B的构造方法
+++++++++
A的实例属性初始化
A的实例块
A的构造方法
B的实例属性初始化
B的实例块
B的构造方法
解释:
1,问题涉及静态初始化,实例初始化,构造方法初始化顺序.原则是静态>实例>构造.
bty,如果静态中又new了个对象,则先要执行完此对象的3个初始化,在回来继续静态实例构造的顺序.
2.静态初始化只只执行一次(第一次加载).
与之对比,每次创建实例的时候,都会执行构造代码块 +与之对应的构造方法.(此题中没有构造代码块).
3静态代码块和静态成员的顺序同级,取程序中的先后顺序. 此题静态成员变量先于静态代码块的位置,所以显示静态属性初始化高于静态代码块.如果注释掉A和B的第一行,则会显示静态代码块优先.
bty,实例初始化也是一样的.但是构造代码块会默认先于构造方法执行.
|