java - 匿名内部类示例中的异常

标签 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

我正在尝试在单个类中执行匿名内部类;那可能吗? 出现此异常的原因是什么?

最佳答案

当构造一个新的 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)。

关于java - 匿名内部类示例中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23855352/

相关文章:

java - 升级到 Android 3.1.2 后出现 AAPT2 错误

java - 如何在 Java 中比较日期并忽略时区

asp.net - VimService55.XmlSerializers.dll 中发生类型 'System.StackOverflowException' 的未处理异常

c - 运行时错误(堆栈溢出)

python - 描述符的 __set__ 未调用

java - 通过使其注意到最后一次交换发生的位置来改进冒泡排序

Java从数据库中获取Blob并写入

algorithm - 在 Scala 中使用递归的列表子列表

c++ - 嵌套类的嵌套类的访问权限

java - 了解 Java 内部类中的作用域