Java 在静态成员中是否有任何要执行的命令?
我执行了下面的代码,看到结果后感到很奇怪Java 在静态成员中是否有任何要执行的命令?,java,static,Java,Static,我执行了下面的代码,看到结果后感到很奇怪 public class Example3 { //section 01 static int a =checker(); //section 02 static{ System.out.println("inside the block"); } //section 03 public static int checker(){ System.out.pri
public class Example3 {
//section 01
static int a =checker();
//section 02
static{
System.out.println("inside the block");
}
//section 03
public static int checker(){
System.out.println("from checker");
return 20;
}
//section 04
public static void main(String[] args) {
System.out.println(a);
System.out.println("from main");
}
}
预期产出
from checker
20
from main
from checker
inside the block
20
from main
实际产出
from checker
20
from main
from checker
inside the block
20
from main
我将代码分成4个部分,如第01节…等来解释这个问题
当我们启动java程序时,我们从主方法开始。所以在主要方法中有以下几种
System.out.println(a); //step 01
System.out.println("from main"); //step 02
在主要方法中有两个步骤。我将在下面解释我的想法
步骤01
main
函数的类仍然是Java类。因此,它必须首先由类加载器加载和初始化,因此流为:
a
变量=>从检查器打印
main
函数的类仍然是Java类。因此,它必须首先由类加载器加载和初始化,因此流为:
a
变量=>从检查器打印
阅读这里的第一个答案:-如果这不能回答您的问题,请澄清它。您有一个静态初始值设定项块,它打印出一些内容(“在块内”)。你为什么不期待这个结果?它必须在某处某时打印出来!关于电话的顺序。。。请看@ernest_k的链接问题。@Seelenvirtuose上述代码的流程如何?如果你能给我一个答案,这对我会很有帮助。这能回答你的问题吗?阅读这里的第一个答案:-如果这不能回答您的问题,请澄清它。您有一个静态初始值设定项块,它打印出一些内容(“在块内”)。你为什么不期待这个结果?它必须在某处某时打印出来!关于电话的顺序。。。请看@ernest_k的链接问题。@Seelenvirtuose上述代码的流程如何?如果你能给我一个答案,这对我会很有帮助。这能回答你的问题吗?