我有课
public class MyMain{
public static void main(String... arg){
Temp t = new Temp(){
{
System.out.println(" instance initialize");
}
};
}
}
class Temp{
int i;
{
i=9;
System.out.println("Static"+i);
}
Temp(){
System.out.println("Temp const "+i);
}
}
当我执行 main 方法时,输出如下:
Static9
Temp const 9
instance initialize
理想情况下,这些块在构造函数之前执行,但内联初始化块在构造函数之后调用。为什么?
你正在创建一个subclass of Temp
。对于每个类,任何实例初始化程序都在构造函数主体之前执行 - 但超类在子类初始化之前执行初始化。所以执行流程是:
- 初始化程序位于
Object
- 构造函数主体位于
Object
- 初始化程序位于
Temp
- 构造函数主体位于
Temp
- 匿名类中的初始化器
- 匿名类中的构造函数主体(无)
我强烈建议你重构任何看起来像这样的代码——目标是清晰而不是聪明。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)