public class FatherClass {
{
System.out.println("父类普通代码块1");
}
static {
System.out.println("父类静态代码块");
}
{
System.out.println("父类普通代码块2");
}
public FatherClass() {
System.out.println("父类构造方法");
}
}
public class SonClass extends FatherClass {
{
System.out.println("子类普通代码块1");
}
static {
System.out.println("子类静态代码块");
}
{
System.out.println("子类普通代码块2");
}
public SonClass() {
System.out.println("子类构造方法");
}
public static void main(String[] args) {
System.out.println("main方法");
new SonClass();
System.out.println("------华丽丽的分割线------");
new SonClass();
System.out.println("------华丽丽的分割线------");
new SonClass();
}
}
执行结果:
父类静态代码块
子类静态代码块
main方法
父类普通代码块1
父类普通代码块2
父类构造方法
子类普通代码块1
子类普通代码块2
子类构造方法
——华丽丽的分割线——
父类普通代码块1
父类普通代码块2
父类构造方法
子类普通代码块1
子类普通代码块2
子类构造方法
——华丽丽的分割线——
父类普通代码块1
父类普通代码块2
父类构造方法
子类普通代码块1
子类普通代码块2
子类构造方法
总结:
- 静态代码块只执行一次
- 普通代码块在每次创建对象时都会执行
- 多个普通代码块的执行顺序由它们在代码中出现的顺序决定(先出现先执行)
- 子类在创建对象的时候会默认先创建出一个父类对象
- 执行顺序:静态代码块 > mian方法 > 普通代码块 > 构造方法