静态代码块、构造块、构造方法的执行顺序
1.首先给出各部分执行先后顺序
父类静态代码块–>子类静态代码块–>父类构造代码块–>父类构造函数–>子类构造代码块–>子类构造函数
2.再来看看代码
package com.xyh.demo.test;
class Father{
static{
System.out.println("父类静态代码块");
}
{
System.out.println("父类构造代码块");
}
public Father(){
System.out.println("父类构造函数");
}
}
public class Child extends Father {
static {
System.out.println("子类静态代码块");
}
{
System.out.println("子类构造代码块");
}
public Child(){
System.out.println("子类构造函数");
}
public static void main(String[] args) {
Child c1= new Child();
System.out.println("--------");
Child c2 = new Child();
}
}
第一次实例化子类Child时,即执行
Child c1= new Child();
运行效果如下:
可见输出结果与上面所列出的执行顺序一致
当我们第二次实例化子类时,即执行
Child c2 = new Child();
运行结果为:
由输出结果可见,没有输出父类和子类的静态代码块了,这是因为静态块在类加载时只执行一次,即在类第一次实例化时执行一次,以后不再执行。