嵌套类,内部类

时间:2014-10-09 13:12:17

标签: java class constructor call

我在构造函数后面创建了一个对象 d ,然后在main方法中创建了另一个对象 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();           
   }
}

4 个答案:

答案 0 :(得分:5)

因为您的类被定义为具有此字段,

OuterTwo d = new OuterTwo();

相当于

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

答案 1 :(得分: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();           
      }
    }

引领无限递归。

答案 2 :(得分: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

答案 3 :(得分:0)

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