目录
1、第一个例子
父类
@Data
public class Person {
private String id;
private String name;
public Person() {
System.out.println("执行父类构造方法。。。");
}
}
子类
@Data
public class Student extends Person{
private String stuNo;
public Student() {
System.out.println("执行子类构造方法。。。");
}
}
main 方法:
public static void main(String[] args) {
Person p = new Student();
}
运行结果:
创建子类对象时,会先调用递归父类构造方法,然后调用子类构造方法
2、第二个例子
在父子类中分别添加代码块方法
父类:
子类:
main方法:
执行结果:
在执行构造方法之前会 先执行代码块中的方法
3、第三个例子
在父子类中分别添加 静态代码块
父类:
子类:
main方法:
测试结果:
静态代码块、代码块和构造方法执行的顺序?
静态代码块(父类子类)-> 父类代码块 -> 父类构造方法 -> 子类代码块 -> 子类构造方法
4、第四个例子
为什么会先执行父子类静态代码块的方法?
静态代码块执行触发的时机是在 类加载的时候;
当我们使用 Class.forName 方法将子类加载到内存的时候,发现子类继承父类,然后它会优先加载父类,接着执行父类的静态代码块方法,执行完父类静态代码块方法后执行子类的静态代码块方法。
这也就说明了为什么 子类静态代码块方法 会优先于 父类代码块方法执行的原因
简单来说,静态代码块在类加载的时候就已经执行了,代码块方法是在创建对象时候才执行的
5、第五个例子
静态代码块方法只执行一次,代码块和构造方法会执行多次(创建多少对象就执行多少次)
main 方法:
执行结果:
静态代码块方法只执行一次,代码块和构造方法会执行多次的原因?
静态代码 是在类加载的时候执行,而把 class 文件加载到内存中(类加载)只会发生一次
代码块和构造方法 是在创建对象时候执行,创建多少对象就执行多少次
6、第六个例子
在什么情况下会使用静态代码块?
数据库连接池的创建
我们希望在项目启动的时候,就给我们创建好数据库连接池,而不是再需要使用数据库连接的时候再一个个创建。
伪代码:
静态代码块有什么特点?
在启动项目的时候,如果加载了该类,那么静态代码块方法会自动执行,以便完成初始化工作。
因此我们可以将一些耗时的操作使用静态代码块来完成