父类代码:
public class FatherA {
//构造方法
public FatherA() {
System.out.println("1.父类A构造方法");
}
//非静态代码块
{
System.out.println("2.父类A非静态代码块");
}
//静态代码块
static {
System.out.println("3.父类A静态代码块");
}
}
测试类:
public class TestB extends FatherA{
//构造方法
public TestB() {
System.out.println("4.B构造方法");
}
//非静态代码块
{
System.out.println("5.B非静态代码块");
}
//静态代码块
static {
System.out.println("6.B静态代码块");
}
public static void main(String[] args) {
System.out.println("7.开始");
//匿名对象,执行TestB前会先继承FatherA,执行FatherA的代码
new TestB();
System.out.println("8.结束");
}
}
运行结果:
综上可得:Java中代码块执行顺序如下:
1.在主类中定义的静态块,优先于主方法(main)执行
2.静态块优先于构造块执行。
2.1无论产生多少实例化对象,静态块都只执行一次。
3.构造块优先于构造方法执行,每产生一个新的对象就调用一次构造块,构造块可以进行简单的逻辑操作
4.有继承关系的话,在main方法里 new 子类,则先调父类,再调子类