//子类 @Setter @Getter public class Insured extends Base implements Serializable { private String name; private String time; public static String staticTime; private Long age; public Insured() { System.out.println("insured: no args constructor"); } { System.out.println("insrued: code"); } static{ System.out.println("insured: static code"); } }
//父类
@Setter@Getter@ToString public class Base implements Serializable{ protected Long id; private String mark; static{ System.out.println("base: staitc code"); } public Base() { System.out.println("base: no args constructor"); } { /** * 构造代码块, 在构造函数之前执行 */ System.out.println("base: code "); } }
测试:
@Test public void test1() throws Exception { Insured insured = new Insured(); }
结果:
base: staitc code
insured: static code
base: code
base: no args constructor
insrued: code
insured: no args constructor
结论:
创建子类对象时执行顺序为:
-->父类中的静态代码块--> 子类中的静态代码块
-->父类中的构造代码块-->父类中的构造函数
-->子类中的构造代码块-->子类中的构造函数