这是我正在编写的程序。运行时出现 StackOverFlowError
异常:
public class maininherit {
maininherit h = new maininherit() {
@Override
public void mai() {
System.out.print("inner");
}
};
public static void main(String[] args){
maininherit t=new maininherit();
t.mai();
}
public void mai(){
System.out.print("hellllll");
h.mai();
}
}
在这里,只有当我使用
StackOverflowError
类作为内部类中的引用时,我才会得到 maininherit
。如果我使用其他类,则不会出现该错误。任何人都可以向我澄清这一点吗?对不起,我非常感谢您的回答,但我有一个疑问,我不知道只有当我在同一个类的构造函数中创建实例时才可以合理或不重复初始化才知道。那么怎么可能有多个初始化?
最佳答案
这一行:
maininherit t=new maininherit();
创建一个新的 maininherit 对象(我称之为
m0
),它有一个相同类型的字段(我称之为 m1
)创建 m0 时,初始化 m1。 m1 也有一个字段,所以 m2 被初始化。 m2 也有一个字段,所以 m3 被初始化等等。
如果
StackOverflowError
没有出现,这将永远持续下去