本文讲下类在初始化加载时,静态代码块、构造代码块、构造函数以及有父类时的执行顺序。
1、无父类时
看个例子就一目了然了。
public class TempTest {
private static final Logger LOGGER = LoggerFactory.getLogger(TempTest.class);
static {
LOGGER.info("静态代码块1");
}
static {
LOGGER.info("静态代码块2");
}
{
LOGGER.info("构造代码块1");
}
{
LOGGER.info("构造代码块2");
}
TempTest() {
LOGGER.info("无参构造器");
}
TempTest(String text) {
LOGGER.info("有参构造器");
}
public static void main(String[] args) {
TempTest tempTest1 = new TempTest();
TempTest tempTest2 = new TempTest("有参");
}
}
输入结果如下:
[main] 静态代码块1
[main] 静态代码块2
[main] 构造代码块1
[main] 构造代码块2
[main] 无参构造器
[main] 构造代码块1
[main] 构造代码块2
[main] 有参构造器
可以看到执行顺序是