静态代码块、构造代码块、构造方法、@Autowired、@PostConstruct 执行顺序

静态代码块、构造代码块、构造方法、@Autowired、@PostConstruct 执行顺序


执行顺序:

1、父类静态变量和静态代码块(先声明的先执行);
2、子类静态变量和静态代码块(先声明的先执行);
3、父类的变量和代码块(先声明的先执行);
4、父类的构造方法;
5、子类的变量和代码块(先声明的先执行);
6、子类的构造方法。

7.@Autowired

8.@PostConstruct


静态代码块:仅在类加载时执行一次。

构造代码块:创建一次对象,执行一次

静态方法里不能调用类的实例方法,但可以调用构造方法(因为不需要实例)。


Demo

class HelloA {
    static int staticParam = 1;
    int param = 0;

    static {
        System.out.println("static A");
        System.out.println("staticParam=" + staticParam);
    }

    {
        System.out.println("I'm A class");
        System.out.println("param=" + param);
    }

    public HelloA() {
        System.out.println("HelloA");
    }
}
public class HelloB extends HelloA {
    static {
        System.out.println("static B");
    }

    {
        System.out.println("I'm B class");
    }

    public HelloB() {
        System.out.println("HelloB");
    }
}
@Test
public void testStatic() {
	new HelloB();
}

输出

posted @ 2023-02-13 17:24  musecho  阅读(452)  评论(0编辑  收藏  举报