gpt4 book ai didi

java - java中静态变量的初始化

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:44:22 25 4
gpt4 key购买 nike

我在面试中被问到这个问题

如果你这样做,

    private int c = d;
private int d;

它会导致你的编译时错误

无法在定义前引用字段。

进入面试题,

    1  public static int a = initializeStaticValue();
2 public static int b = 20;


3 public static int initializeStaticValue() {
4 return b;

}

5 public static void main(String[] args) {
System.out.println(a);
System.out.println(b);
}

我给出的响应与 a 通过调用 initializeStaticValue() 初始化相同,它是 引用一个未定义的b

但程序运行良好,可以编译并打印

0
20

我不明白为什么

Cannot reference a field before it is defined. 

没有被抛出。

其次,我调试的时候,为什么控件会落在

3  public static int initializeStaticValue() {

我的意思是,为什么这是程序的起始位置。

最佳答案

如果你关心初始化/执行的顺序,下面是将要发生的事情(我相信它不是很准确,只是给你一个想法):

  1. JVM 被要求运行 Java 应用程序(假设您的类名为 Foo),它会尝试从类路径加载 Foo
  2. Foo 已加载,并为静态变量分配了默认值(0 表示 int)
  3. 将执行静态初始化程序,首先在第 1 行运行它,然后调用 initializeStaticValue(),此时返回 b 的值 (0),并且将其分配给 a
  4. 静态初始化继续,到达第 2 行。它为 b 赋值 20。
  5. Foo 成功加载和初始化,JVM 调用 Foo.main()

关于java - java中静态变量的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30519517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com