Java 嵌套类,内部类

Java 嵌套类,内部类,java,class,constructor,call,Java,Class,Constructor,Call,我在构造函数之后创建了一个对象d,然后在main方法中创建了另一个对象f。我需要理解为什么输出会给出异常(线程“main”java.lang.StackOverflower中的异常)。但是,如果我不在构造函数之后创建对象d,程序将成功运行 public class OuterTwo { public OuterTwo() { System.out.println("OUTER!"); } OuterTwo d = new OuterTwo(); publ

我在构造函数之后创建了一个对象d,然后在main方法中创建了另一个对象f。我需要理解为什么
输出
会给出异常(
线程“main”java.lang.StackOverflower中的异常
)。但是,如果我不在构造函数之后创建对象d,程序将成功运行

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

   OuterTwo d = new OuterTwo();

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

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

OuterTwo d = new OuterTwo();
这相当于

OuterTwo d;
public OuterTwo() {
  d = new OuterTwo(); // <-- this is infinite recursion.
  System.out.println("OUTER!");
}
public class OuterTwo {
        public OuterTwo() {
            d =new OuterTwo();
            System.out.println("OUTER!");   
        }
      OuterTwo d;
      public static void main(String[] args) {
            OuterTwo f = new OuterTwo();           
      }
    }
outertwod;
公共外线wo(){

d=newoutertwo();//您的代码相当于

OuterTwo d;
public OuterTwo() {
  d = new OuterTwo(); // <-- this is infinite recursion.
  System.out.println("OUTER!");
}
public class OuterTwo {
        public OuterTwo() {
            d =new OuterTwo();
            System.out.println("OUTER!");   
        }
      OuterTwo d;
      public static void main(String[] args) {
            OuterTwo f = new OuterTwo();           
      }
    }

这导致了无限递归。

您遇到堆栈溢出。这是可以理解的。 您的OuterTwo类实例化类型为OuterTwo的成员。
您有一个无限的构造函数调用来创建OuterTwo对象,该对象保存对OuterTwo对象的引用,并在..上重复。

您在这里犯了一个小错误。请使用类似的方法

public class OuterTwo {

     OuterTwo d;

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

     public static void main(String[] args) {
          OuterTwo f = new OuterTwo();           
     }
}
为了更好地理解
内部
嵌套
类,请访问以下链接


而且

我还将感谢您提供一份关于JAVA中嵌套类的编写精良、解释精良的教程。我在这里没有看到任何嵌套类。这是一个无限递归。