哪个会加载第一个静态块或静态变量?

时间:2017-10-24 08:41:52

标签: java

正如我读到的那样,每个人都说首先会执行静态块,但是当我运行一段代码时,我发现静态变量首先加载。现在这让我感到困惑,请给出正确的解释。

代码

public class MyClass 
{
    static int x=show();
    static
    {
        System.out.println("Hello Mayar");
    }
    public static int show()
    {
        System.out.println("Hello Show");
        return 1;
    }
    public static void main(String a[])
    {
        System.out.println("Hello Main");
    }
}

输出

Hello Show
Hello Mayar
Hello Main

2 个答案:

答案 0 :(得分:6)

静态块和变量按其在java源文件中的出现顺序进行评估。

根据Java 8 spec on class initialization

  
      
  1. 接下来,按文本顺序执行类的类变量初始值设定项和静态初始值设定项,或接口的字段初始值设定项,就好像它们是单个块一样。
  2.   

答案 1 :(得分:0)

静态块,变量和方法按照声明的顺序加载到Heap的永久生成空间。但在您的情况下,static int x=show(); show()方法首先加载,因此即使x variable是初始加载语句,您也会调用它来分配x的值。