public class Parent {
static {
System.out.println("父类 静态代码块");
}
{
System.out.println("父类 普通代码块");
}
public Parent() {
System.out.println("父类构造方法");
}
}
public class Son extends Parent {
static {
System.out.println("子类 静态代码块");
}
{
System.out.println("子类 普通代码块");
}
public Son() {
System.out.println("子类 构造方法");
}
public static void main(String[] args) {
Son son = new Son();
}
}
运行结果:
- 执行顺序: 静态代码块>构造代码块>构造函数
- 有继承关系时:父类静态代码块>子类静态代码块>父类构造代码块>父类构造函数>子类构造代码块>子类构造函数
静态代码块
静态代码块:在java中使用static关键字声明的代码块
- 静态代码块的作用:初始化类的属性
- 每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于main主方法执行。
- 如果类中包含多个静态代码块,那么将按照先后顺执行
构造代码块
构造代码块:构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于构造函数。
- 多次创建对象实例时,静态代码块只会初始化一次。而构造代码块,构造函数每次都会执行。