2014-10-09 84 views
2

我在主要方法中创建了一个对象d,在构造函数之后,然后是另一个对象,f。我需要了解为什么Output发生异常(Exception in thread "main" java.lang.StackOverflowError)。但是,如果我没有在构造函数之后创建对象d,程序将成功运行。嵌套类,内部类

public class OuterTwo { 
    public OuterTwo() { 
     System.out.println("OUTER!"); 
    } 

    OuterTwo d = new OuterTwo(); 

    public static void main(String[] args) { 
     OuterTwo f = new OuterTwo();   
    } 
} 
+0

我也将是一个源感激一个良好的书面与有关JAVA嵌套类说明教程。 – Insanovation 2014-10-09 13:13:51

+2

我在这里没有看到任何嵌套类 – talex 2014-10-09 13:18:04

回答

5

因为你的类被定义为具有该领域,

OuterTwo d = new OuterTwo(); 

即相当于

OuterTwo d; 
public OuterTwo() { 
    d = new OuterTwo(); // <-- this is infinite recursion. 
    System.out.println("OUTER!"); 
} 
2

您的代码就相当于

public class OuterTwo { 
     public OuterTwo() { 
      d =new OuterTwo(); 
      System.out.println("OUTER!"); 
     } 
     OuterTwo d; 
     public static void main(String[] args) { 
      OuterTwo f = new OuterTwo();   
     } 
    } 

这是导致无限的cursion。

+2

这是一个无限的_recursion_。 – BackSlash 2014-10-09 13:27:40

+0

是............. – 2014-10-09 13:28:17

0

您会遇到堆栈溢出。这是可以理解的。 您的OuterTwo类实例化OuterTwo类型的成员。 你有一个无限的构造函数调用来创建OuterTwo对象,该对象持有对OuterTwo对象的引用,on和on..all再次。

1

你在这里犯了一个小错误。使用这样的东西。

public class OuterTwo { 

    OuterTwo d; 

    public OuterTwo() { 
      d =new OuterTwo(); 
      System.out.println("OUTER!"); 
    } 

    public static void main(String[] args) { 
      OuterTwo f = new OuterTwo();   
    } 
} 

为了更好地理解InnerNested类遵循这些链接。

Inner classNested class