Java 匿名内部类示例中的异常
当运行上述代码时,我得到:Java 匿名内部类示例中的异常,java,stack-overflow,inner-classes,anonymous-class,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)
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();
}
}
线程“main”java.lang.StackOverflowerr中出现异常
我试图在单个类中执行匿名内部类;可能吗?
出现此异常的原因是什么?当构造一个新的
outer
时,必须初始化字段y
,但这包括创建另一个outer
(或者是outer
的匿名子类)。这将无限期地继续并导致堆栈溢出
请注意,错误发生在主文件的第一行
a.meth()
甚至从未接触过
您可以通过在创建时不让
外部
尝试实例化自身来修复代码(例如,您可以使y
静态
):
外面的
匿名的
请注意,我假设了一个更为传统的命名方案(即
Outer
而不是Outer
)。当构建一个新的Outer
时,必须初始化字段y
,但这包括创建另一个Outer
(或者更确切地说,是Outer
的匿名子类)。这将无限期地继续并导致堆栈溢出
请注意,错误发生在主文件的第一行
a.meth()
甚至从未接触过
您可以通过在创建时不让
外部
尝试实例化自身来修复代码(例如,您可以使y
静态
):
外面的
匿名的
请注意,我假设了一个更为传统的命名方案(即
Outer
而不是Outer
)。@hexafraction异常位于线程“main”java.lang中。StackOverflowError@hexafraction线程“main”java.lang.StackOverflowerErrors中出现异常,因此无法在单个类中编写相同的线程file@saurabhkumar你可以(虽然从逻辑上讲,您可能应该分离出main
)。重要的是使y
成为静态。我已经再次编辑过。静态使outer只创建一次对象?这就是stackoverflow异常消失的原因,对吗?@saurabhkumar看到这一点:。对不起,outer前面的static y=new outer()也就是说,我们可以在不创建对象的情况下调用它。我现在是吗?所以不可能在单个类中编写相同的代码file@saurabhkumar您可以(尽管从逻辑上讲,您可能应该将main
分开)。重要的是使y
static。我又编辑了一次。static使outer只创建了一次对象?这就是stackoverflow异常消失的原因,对吗?@saurabhkumar看到了:。对不起,outer前面的static y=new outer()意味着,我们可以在不创建对象的情况下调用它。我现在是吗?
Exception in thread "main" java.lang.StackOverflowError
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