我想知道什么时候静态变量初始化为默认值.是否正确加载类时,会创建(分配)静态变量,然后执行声明中的静态初始化和初始化?在什么时候给出默认值?这导致了前向参考的问题.
另外请您解释一下这个问题,为什么静态字段没有及时初始化?特别是Kevin Brock在同一网站上给出的答案.我无法理解第三点.
我试图运行此程序,但这会产生运行时错误(StackOverflowError).如果在类Static中我将引用对象ob,static,则不会发生错误.任何人都可以请解释我为什么会发生这种情况,请解释我如何初始化字段变量(无论是静态还是非静态以及引用或非引用变量)?
public class Static {
public Static ob = new Static();
private int a;
public void win(Static obj) {
//System.out.printf("ob.a = %d\n", ob.a);
obj.a = 15;
System.out.printf("ob.a = %d", ob.a);
}
}
public class StaticTest {
public static void main(String args[])
{
Static obj=new Static();
//Static obj1=new Static();
// obj.win(obj1.ob);
}
}
Run Code Online (Sandbox Code Playgroud)