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/