static变量,static代码块,构造函数,代码块等的加载顺序

public class Main {
    public Main() {
        System.out.println("construct invoke");  // 执行顺序6
    }
    static int i = 4;  // 执行顺序1
    static {
        i++;
        System.out.println("first static invoke i = " + i);  // 执行顺序2
    }
    private int j = 0;  // new 对象之后才会开始执行  执行顺序4
    {
        System.out.println("匿名代码块执行" + j);  // new 之后才执行  执行顺序5
    }
    static {
        System.out.println("second static invoke");  // 执行顺序3
    }
    static void fun() {
        System.out.println("call static function");  // 只有在调用的时候才会执行
    }
    public static void main(String [] args) {
        new Main();
        Main.fun();
    }
}

运行结果:


image.png
  • 在类加载阶段,先顺序执行static变量的赋值
  • 顺序执行static代码块(static代码块只有在类加载的时候,才会执行,发生在类加载的初始化阶段,putstatic、getstatic、invokestatic、new指令一定会触发初始化阶段)

以下代码块只发生在实例对象时,并且没实例化一次对象,都会执行一轮

  • 先顺序执行内部变量赋值
  • 顺序执行匿名代码块
  • 执行构造函数

静态方法只有在调用的时候,会有执行。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容