我想问一下为什么下面的代码会导致错误:
class A
{
A()
{
statObj.x = 5;
}
int x;
static A statObj = new A();
}
我得到 ExceptionInInitializerError。我不明白为什么。在这种情况下,静态变量statObj
将被初始化为第一个。所以,如果我是对的,静态对象statObj = new A()
将被创建为第一个。
这个内部静态对象的创建和初始化顺序是什么?在调用内部静态对象构造函数之前,statObj.x 不是默认初始化为 0 值statObj.A()
吗?如果是这样,为什么 statObj.x 的行为就像它没有被初始化(我认为它是默认初始化为 0 值)?
还有一个为什么这个问题只发生在构造函数中而不发生在方法中?以下代码工作正常:
class A
{
A()
{
}
void met1()
{
statObj.x = 5;
}
int x;
static A statObj = new A();
}
public MainClass
{
public static void main(String[] arg)
{
A a = new A();
a.statObj.met1();
}
}