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)。