返回
Android面试之——静态代码块执行顺序剖析
Android
2023-09-25 09:50:31
前言
在Android面试中,关于静态代码块的执行顺序问题可谓是面试官的必考题之一。为了帮助大家更好地理解静态代码块的执行顺序,我们先来看一段代码:
// 父类
class Parent {
// 静态代码块
static {
System.out.println("父类静态代码块执行");
}
// 构造方法
public Parent() {
System.out.println("父类构造方法执行");
}
}
// 子类
class Child extends Parent {
// 静态代码块
static {
System.out.println("子类静态代码块执行");
}
// 构造方法
public Child() {
System.out.println("子类构造方法执行");
}
}
// 调用代码
public class Main {
public static void main(String[] args) {
System.out.println("调用代码执行");
Child child = new Child();
}
}
这段代码的运行结果如下:
父类静态代码块执行
子类静态代码块执行
调用代码执行
父类构造方法执行
子类构造方法执行
从运行结果中,我们可以看到,父类静态代码块首先执行,然后是子类静态代码块,最后才是调用代码和构造方法。
执行顺序剖析
为了更深入地理解静态代码块的执行顺序,我们来逐步分析一下这段代码:
-
当Java虚拟机加载一个类时,它会首先执行该类的静态代码块。静态代码块中的代码只会被执行一次,并且在类被加载时执行。
-
在调用代码中,我们创建了一个
Child
类的实例。当Java虚拟机创建Child
类的实例时,它会首先执行Child
类的静态代码块,然后执行Child
类的构造方法。 -
在
Child
类的构造方法中,我们调用了父类的构造方法。当Java虚拟机执行父类的构造方法时,它会首先执行父类的静态代码块,然后执行父类的构造方法。
因此,这段代码的运行结果如下:
- 父类静态代码块执行。
- 子类静态代码块执行。
- 调用代码执行。
- 父类构造方法执行。
- 子类构造方法执行。
总结
通过分析这段代码,我们可以得出以下结论:
- 父类的静态代码块在子类的静态代码块之前执行。
- 在创建子类的实例时,Java虚拟机会先执行子类的静态代码块,然后执行子类的构造方法。
- 在子类的构造方法中调用父类的构造方法时,Java虚拟机会先执行父类的静态代码块,然后执行父类的构造方法。
希望这篇文章能帮助大家更好地理解Java中静态代码块的执行顺序。