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

时间:2022-03-19 19:33:06
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(); } }

执行结果:

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

从执行结果可以看出:

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

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

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