...main...{
  A a=new A();
}class A{
  A a=new A();
}运行时抛出StackOverflowError异常。很显然这是因为类A无限次初始化的关系。我也明白这为什么要报错。但是,我们小组长一定要我找出这个会出错的理论依据。
请各位前辈们指点一下OTL。
有什么相关的贴子什么的参考。。

解决方案 »

  1.   

    不知道对不对啊,解释下:
    对于引用类型的初始化:classname cn=new classname(),在内存的执行过程如下,在内存的栈中创建一个引用cn,也就是保存指向在堆区创建的对象classname()的地址,楼主的这个写法极端,
    ...main...{
      A a=new A();
    }class A{
      A a=new A();
    }在main()方法中,创建了变量a,在栈区保存指向堆区创建的对象A,new的执行过程如下:
    静态代码块
    非静态代码块
    默认初始化成员变量
    显式初始化成员变量
    构造方法,当初始化话成员变量a时,执行到显式初始化,又是new A(),那么这个执行就会无限循环下去,内存不溢出才怪...
      

  2.   

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