嵌套类可以实例化外部类吗?

时间:2012-06-01 14:07:55

标签: java class recursion nested instantiation

假设外部类中有一个嵌套类;这个嵌套类可以在其自身内实例化外部类的实例吗?

如果外部类在其自身内实例化一个内部类的实例,而该实例又在内部类中实例化外部类的实例,这是否会导致无限递归?

2 个答案:

答案 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)

如果你有一个静态内部类,你应该能够这样做,因为外部类实际上只是作为命名空间 - 也就是说,拥有现有实例是合法的没有外部类的现有实例的内部类,所以是的。

如果内部类不是静态的,它只能在其封闭类的上下文中存在(只能实例化)。所以你必须首先创建外部才能创建内部,所以没有。