【发布时间】:2021-10-15 23:31:20
【问题描述】:
我想知道在以下示例中首先初始化了什么A.a 或 B.b
class A {
static int a = methodA();
static int methodA() { return 5; }
}
class B {
static int b = methodB();
static int methodB() { return A.a; } // here is the problem: `b` depends on `a`
}
如果a,则一切正常methodA 返回 5,该值存储到 a。然后methodB检索a的值并返回。
但是如果b是第一个,它会从a获取垃圾值,然后a被初始化为5。
【问题讨论】:
-
你试过了吗?设置一些断点并尝试不同的组合......最好的学习方式。您应该会发现第一次访问静态类时,它会初始化它并运行静态构造函数(如果存在)。因此,如果
B.b被调用并且A尚未被访问,它应该立即初始化A。 -
@David784 我试过了。它成功了。这并不意味着它会一直有效