public class aa
{
      public static void main(String[] args)
      {
      xx a = new xx();
      a.getC();
      System.out.println("dd");
      }
}class xx
{
xx ekao = new xx();//这里不加static修饰会报java.lang.StackOverflowError Exception  public xx()
{
System.out.println("ok");
}
public void getC()
{
System.out.println("bb");
}
}这是为什么?谢谢

解决方案 »

  1.   

              
          你在类的方法外直接实例化类而不加static声明它为静态的,当然会导致StackOverflowError异常   因为你在 new   xx(); 的时候实际上是在调用XX构造函数,通过反编译可看出它实际执行的代码,如下:       Class xx{
              public xx(){
                  a= new xx();
              }
           }   在构造函数中是调用init()方法的,你将类本身放在构造函数中,它就会不断的调用init,最终导致   StackOverflowError异常,但如果声明为static它就不会调用init,放在方法体中也行(构造函数除外)