结论
1.静态属性和静态代码块按照编写的顺序依次执行,只会在第一次加载的时候执行一次
2.如果存在继承关系,先执行父类的静态属性和静态代码块,再执行子类的静态属性和静态代码块
3.接下来执行父类带码块、构造方法,每次创建实例的时候都会执行
4.接下来执行子类代码块、构造方法,每次创建实例的时候都会执行
验证
父类
public class Person {
static {
System.out.println("静态代码块person");
}
public Person(){
System.out.println("构造方法person");
}
{
System.out.println("代码块person");
}
}
子类
public class Xiaomi extends Person {
static {
System.out.println("静态代码块xiaomi");
}
public Xiaomi(){
System.out.println("构造方法xiaomi");
}
{
System.out.println("代码块xiaoming");
}
}
测试类
public class MainTest {
static {
System.out.println("静态代码块mianTest");
}
public MainTest(){
System.out.println("构造方法mainTest");
}
public static void main(String[] args) {
System.out.println("main method");
new Xiaomi();
new Xiaomi();
}
}
输出的顺序为:
静态代码块mianTest
main method
静态代码块person
静态代码块xiaomi
代码块person
构造方法person
代码块xiaoming
构造方法xiaomi
代码块person
构造方法person
代码块xiaoming
构造方法xiaomi