哪个将首先加载静态变量或静态块?

2022-09-03 07:51:10

我的一个朋友问我,哪个会加载第一个静态变量或静态块。

我的答案指向静态变量。

所以他给了我两个方程式,并说要区分它们
第一个方程

public class Some {
    public static void main(String args[])
    {
        System.out.println(Some.x);
    }
    static {
        System.out.println(Some.x);
    }
    static int x=90;
}

输出: 0 90

第二等式

public class Some {
    public static void main(String args[])
    {
        System.out.println(Some.x);
    }
    static int x=90;
    static {
        System.out.println(Some.x);
    }
}

操作: 90 90

我试图反编译字节码,发现上面的两个等式都是一样的。请帮我区分它们。我对静态变量何时初始化感到困惑。


答案 1

静态块按照它们在源文件中出现的顺序进行初始化。在堆栈溢出上已经有几个与此相关的问题...这个给你一个很好的答案: Java :静态最终字段初始化的顺序是什么?


答案 2

静态变量和静态块按其出现的顺序执行。

这里第一个O/P:0 90如静态变量初始化语句后执行的静态块的语句System.out.println(Some.x);static int x=90;