在Java中,静态代码块、构造代码块、构造方法、普通代码块的执行顺序是一个笔试的考点,今天我来以例题的形式进行一下总结。
简要介绍:
静态代码块:用 staitc 声明,最早执行,JVM 加载类时执行,且仅执行一次。
构造代码块:类中直接用 {} 定义,比构造函数早执行,它与构造函数类似,在每一次创建对象时执行。
普通代码块:类中的普通方法,只有被调用才执行。
构造方法:执行时间比构造代码块时间晚,也是在对象初始化的时候运行。
执行顺序的优先级:
静态块 -> main() -> 构造块 -> 构造方法。
例题:
说出下面代码的执行顺序:
//静态代码块、构造代码块、构造方法、普通代码块、main函数的执行顺序测试用例
package Java_2;
public class D {
public D() {
System.out.println("1.D的无参构造");
}
{
System.out.println("2.D的构造块");
}
static {
System.out.println("3.D的静态代码块");
}
}
class E extends D {
public E() {
System.out.println("4.E的无参构造");
}
{
System.out.println("5.E的构造块");
}
static {
System.out.println("6.E的静态代码块");
}
public static void main(String[] args) {
System.out.println("7.main开始");
E e1 = new E();
E e2 = new E();
System.out.println("8.main结束");
}
}
结果:
分析:
执行过程描述:父类D加载:3-> 子类E加载:6-> 进入main方法:7 -> 产生子类对象e1 -> 先要产生父类对象:21 -> 回到子类,产生子类对象:54 ->产生子类对象e2 -> 先要产生父类对象:21 -> 回到子类,产生子类对象:54-> 8。所以执行顺序为:3 6 7 2154 2154 8