匿名内部类示例中的异常

时间:2014-05-25 12:38:22

标签: java stack-overflow inner-classes anonymous-class

public class outer {
    void meth(){
        System.out.println("outer");
    }

    outer y = new outer(){
        void meth(){
            System.out.println("anonymous");
        }
    };

    public static void main(String[] args) {
        outer a = new outer();
        a.meth();
    }
}

当我在上面的代码上运行时,我得到了:

Exception in thread "main" java.lang.StackOverflowError

我试图在一个类中执行匿名内部类;那可能吗? 这个例外的原因是什么?

1 个答案:

答案 0 :(得分:4)

构建新的outer时,必须初始化字段y,但这包括创建另一个 outer(或者更确切地说,是匿名的outer)的子类。这会无限期地继续并导致堆栈溢出。

请注意,错误发生在main的第一行; a.meth()甚至都没有达到。


您可以通过在创建时Outer尝试实例化自己来修复代码(例如,您可以y static):

public class Outer {
    void meth(){
        System.out.println("outer");
    }

    static Outer y = new Outer(){
        void meth(){
            System.out.println("anonymous");
        }
    };

    public static void main(String[] args) {
        Outer a = new Outer();
        a.meth();
        y.meth();
    }
}
outer
anonymous

请注意,我采用了更传统的命名方案(即Outer而不是outer)。