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
我试图在一个类中执行匿名内部类;那可能吗? 这个例外的原因是什么?
答案 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
)。