日期:2014-05-20  浏览次数:20762 次

[急]一个很简单的在类中初始化本类的问题
Java code

...main...{
  A a=new A();
}

class A{
  A a=new A();
}


运行时抛出StackOverflowError异常。很显然这是因为类A无限次初始化的关系。我也明白这为什么要报错。

但是,我们小组长一定要我找出这个会出错的理论依据。
请各位前辈们指点一下OTL。
有什么相关的贴子什么的参考。。

------解决方案--------------------
不知道对不对啊,解释下:
对于引用类型的初始化:classname cn=new classname(),在内存的执行过程如下,在内存的栈中创建一个引用cn,也就是保存指向在堆区创建的对象classname()的地址,楼主的这个写法极端,
...main...{
A a=new A();
}

class A{
A a=new A();
}

在main()方法中,创建了变量a,在栈区保存指向堆区创建的对象A,new的执行过程如下:
静态代码块
非静态代码块
默认初始化成员变量
显式初始化成员变量
构造方法,

当初始化话成员变量a时,执行到显式初始化,又是new A(),那么这个执行就会无限循环下去,内存不溢出才怪...
------解决方案--------------------
...main...{
A a=new A();
}

class A{
static A a=new A();
}
这样就不会出错了。你小组长估计单例模式看漏了吧