Loading

Java静态变量、静态块、构造块、构造函数、main函数、普通代码块的执行顺序

测试代码

public class SingleTest {

    public static String v = "StaticValue";

    static {
        System.out.println("static静态变量:" + v);
        System.out.println("static静态块");
    }

    {
        System.out.println("构造块");
    }

    public SingleTest() {
        System.out.println("构造函数");
    }

    public void say() {
        System.out.println("普通方法");
    }

    public static void main(String[] args) {
        System.out.println("main 开始");
        SingleTest singleTest = new SingleTest();
        singleTest.say();
        System.out.println("main 结束");
    }
}

 

结果

 

解释

JVM虚拟机一启动就会仅加载一次所有static变量,之后仅加载一次所有static代码块。每当有类实例化时,构造块都会早于构造函数执行,然后再执行构造函数。

 

结论

一个类实例化时的执行顺序:
静态变量 > 静态代码块 > 构造代码块 > 构造函数

细化执行顺序为:
静态变量 > 静态代码块 > main函数 > 构造代码块 > 构造函数 > 普通方法

 

查看类继承时,静态块、构造块、构造函数等的执行顺序,请点击

 

posted @ 2021-03-05 10:14  Convict  阅读(135)  评论(0编辑  收藏  举报