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(); } }
执行结果:
...父类的静态代码块...
...子类的静态代码块...
...父类的普通代码块...
...父类的构造方法...
...子类的普通代码块...
...子类的构造方法...
从执行结果可以看出:
静态代码块总是最先执行的,且父类的静态代码块优先执行于子类的静态代码块。
普通的代码块优先执行于构造方法
父类的普通代码块和构造方法优先于子类