Java 通过实例调用方法会引发stackOverFlow错误
我正在处理以下场景,其中我创建了一个类的实例,并在该实例上调用了一个方法。我的代码:Java 通过实例调用方法会引发stackOverFlow错误,java,object,stack-overflow,Java,Object,Stack Overflow,我正在处理以下场景,其中我创建了一个类的实例,并在该实例上调用了一个方法。我的代码: public class test { test t = new test(); public void show(){ System.out.println("df"); } public static void main(String[] args) { // TODO Auto-generated method stub test t = new test();
public class test {
test t = new test();
public void show(){
System.out.println("df");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
test t = new test();
t.show();
}
这会抛出一个
StackOverflowException
,因为每个测试都有一行
test t = new test()
这将创建一个新的测试
,它将再次调用同一行代码,这将。。。您可以看到这是如何创建无限调用链的
你应该去掉那条线。即使它做了您希望它做的事情,也不需要它,因为您已经在主方法中创建了一个新的测试。为什么要在类中创建新的类实例?删除测试t=新测试();在测试类内部,然后重试在实例化类内部的Test
实例时,您有一个错误的递归调用。它不断实例化新实例,直到没有剩余的堆空间。当您有StackOverflowerError
时,首先需要检查代码中的任何地方是否重复调用自身。初始化时,test
的每个实例都会创建一个新的test
实例。这种编写方式应该是注释。请阅读。我正在打电话,我看不到在他的帖子中添加评论的按钮。我想发表评论,但没找到按钮。我使用的是Stack Exchange appYou,您还没有必要的声誉来添加评论。如果您滥用系统并将评论作为答案发布,您只会延迟实现所需的代表。你可以写下来作为一个答案,解释为什么StackOverflow发生了(但其他人已经发生了)。好的,我现在明白了。谢谢我建议你删除这个答案(以避免获得更多的反对票),然后集中精力写一些好的答案,让你的代表在哪里发表评论(50)。