我在构造函数后面创建了一个对象 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();
}
}
答案 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();
}
}
为了更好地理解Inner
和Nested
类,请按以下链接进行操作。
答案 3 :(得分:0)
您遇到堆栈溢出。这是可以理解的。 您的OuterTwo类实例化OuterTwo类型的成员。 你有一个无限的构造函数调用来创建OuterTwo对象,这些对象包含对OuterTwo对象的引用,on和on..all再次。