假设外部类中有一个嵌套类;这个嵌套类可以在其自身内实例化外部类的实例吗?
如果外部类在其自身内实例化一个内部类的实例,而该实例又在内部类中实例化外部类的实例,这是否会导致无限递归?
答案 0 :(得分:12)
如果您的意思如下,那么是,将导致StackOverflowError
。
public class Outer {
public Outer() {
Inner inner = new Inner();
}
private class Inner {
public Inner() {
Outer outer = new Outer();
}
}
public static void main(String[] args) {
Outer outer = new Outer();
}
}
以上版画:
Exception in thread "main" java.lang.StackOverflowError
at com.adarshr.Outer.<init>(Outer.java:6)
at com.adarshr.Outer$Inner.<init>(Outer.java:12)
at com.adarshr.Outer.<init>(Outer.java:7)
at com.adarshr.Outer$Inner.<init>(Outer.java:12)
at com.adarshr.Outer.<init>(Outer.java:7)
at com.adarshr.Outer$Inner.<init>(Outer.java:12)
答案 1 :(得分:4)
如果你有一个静态内部类,你应该能够这样做,因为外部类实际上只是作为命名空间 - 也就是说,拥有现有实例是合法的没有外部类的现有实例的内部类,所以是的。
如果内部类不是静态的,它只能在其封闭类的上下文中存在(只能实例化)。所以你必须首先创建外部才能创建内部,所以没有。