正如我读到的那样,每个人都说首先会执行静态块,但是当我运行一段代码时,我发现静态变量首先加载。现在这让我感到困惑,请给出正确的解释。
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
答案 0 :(得分:6)
静态块和变量按其在java源文件中的出现顺序进行评估。
根据Java 8 spec on class initialization:
- 接下来,按文本顺序执行类的类变量初始值设定项和静态初始值设定项,或接口的字段初始值设定项,就好像它们是单个块一样。
醇>
答案 1 :(得分:0)
静态块,变量和方法按照声明的顺序加载到Heap的永久生成空间。但在您的情况下,static int x=show();
show()
方法首先加载,因此即使x variable
是初始加载语句,您也会调用它来分配x
的值。