Java中static块、构造块、构造函数的执行顺序
最近被一个面试题难住了,看来之前对JAVA的执行顺序欠了解。以为原面试题代码:
public class Example {
    public static void main(String[] args) {
        HelloB bb = new HelloB();
    }
}
class HelloA {
    public HelloA() {
        System.out.println("HelloA");
    }
    {
        System.out.println("I'm A class");
    }
    static {
        System.out.println("static A");
    }
}
class HelloB extends HelloA {
    public HelloB() {
        System.out.println("HelloB");
    }
    {
        System.out.println("I'm B class");
    }
    static {
        System.out.println("static B");
    }
    public static void main(String[] args) {
        new HelloB();
    }
}
执行结果是:
  static A
  static B
  
  I'm A class
  HelloA
  I'm B class
  HelloB
得出以下总结:
1. 当调用JAVA子类的无参构造函数时,虽然子类无参构造函数没有显式调用其父类的无参构造函数,但是Java会自动调用其父类的无参构造器 (注:有参构造函数需要显式调用)
2. JAVA的执行顺序是:
父类静态变量-> 父类静态块 -> 子类静态变量 -> 子类静态块 -> 父类成员变量 -> 父类构造块 -> 父类构造函数 -> 子类成员变量 -> 子类构造块 -> 子类构造函数
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号