静态代码块,普通代码块,构造函数的执行顺序

class Father{   
    public Father(){
        System.out.println("...父类的构造方法...");
    }    
    static{
        System.out.println("...父类的静态代码块...");
    }    
    {
        System.out.println("...父类的普通代码块...");
    }    
}

class Son extends Father{    
    public Son(){
        System.out.println("...子类的构造方法...");
    }    
    static{
        System.out.println("...子类的静态代码块...");
    }    
    {
        System.out.println("...子类的普通代码块...");
    }    
}

public class CodeBlock {    
    public static void main(String[] args) {        
        Son son = new Son();
    }
}

执行结果:

...父类的静态代码块...
...子类的静态代码块...
...父类的普通代码块...
...父类的构造方法...
...子类的普通代码块...
...子类的构造方法...

从执行结果可以看出:

静态代码块总是最先执行的,且父类的静态代码块优先执行于子类的静态代码块。

普通的代码块优先执行于构造方法

父类的普通代码块和构造方法优先于子类

原文地址:https://www.cnblogs.com/winner-0715/p/5012581.html