我们通过案例来深化java中代码的运行顺序。
public class App {
private static App d = new App();
private SubClass t = new SubClass();
static {
System.out.println(3);
}
public App() {
System.out.println(4);
}
public static void main(String[] args) {
System.out.println("Hello");
}
}
class SuperClass {
SuperClass() {
System.out.println("构造SuperClass");
}
}
class SubClass extends SuperClass {
static {
System.out.println(1);
}
public SubClass() {
System.out.println(2);
}
}
以上代码执行结果为:
1)1----App类依赖于SubClass类,所以会先把SubClass类的字节码加载进JVM
2)构造SuperClass----会先调用父类的构造器
3)2----非static字段的初始化其实就在构造器中,会优先构造器的其他语句执行的
4)4----然后调用App的构造器
5)3----加载App的静态资源
6)Hello----运行主方法
网友评论