又见构造块与静态代码块(笔试)
-
先执行父类的静态代码块,再执行子类的静态代码块。
-
执行父类的构造块,执行父类的构造方法体,相当于是把子类对象中包含的那个父类对象构造出来。
-
执行子类的构造块,执行子类的构造方法体(完整的把整个子类对象构造出来)。
package com.lagou.task08; /** * @author hhc19 * @date 2021/12/29 23:03 * @description */ public class SuperTest { { System.out.println("SuperTest类中的构造块!"); // (3) } static { System.out.println("SuperTest类中的静态代码块!"); // (1) 在类加载到方法区中的时候执行 } public SuperTest() { System.out.println("SuperTest类中的构造方法体!"); // (4) } public static void main(String[] args) { // 使用无参方式构造对象 SuperTest superTest = new SuperTest(); } } package com.lagou.task08; /** * @author hhc19 * @date 2021/12/29 23:06 * @description */ // 先加载父类再加载子类,原因:子类继承父类,如果不先加载父类的话,子类就蒙圈了 public class SubSuperTest extends SuperTest { // 一般写子类都是 sub... { // 在创建子类对象时会先创建一个父类类型的对象,故而父类的构造方法先于子类的构造方法,而父类的构造块先于父类的构造方法体 System.out.println("=========SubSuperTest类中的构造块!"); // (5) } static { System.out.println("=========SubSuperTest类中的静态代码块!"); // (2) 加载到方法区中的时候执行 } public SubSuperTest() { System.out.println("=========SubSuperTest类中的构造方法体!"); // (6) } public static void main(String[] args) { // 使用无参方式构造子类对象 SubSuperTest subSuperTest = new SubSuperTest(); } }