当我尝试在自己的类中创建对象时,为什么显示stackoverflowerror?

问题描述

close
terminate
close

在我自己的类中创建SingleInheritance类的对象时,它不会引发任何错误,而在另一个类中执行相同的操作时,它会引发错误。

error

我知道在自己的类中创建对象很愚蠢,但这是在我尝试做其他事情时发生的。我需要对正在发生的事情进行解释。

解决方法

您的代码存在的问题是递归地创建了类Plumber对象,并且没有任何条件可以终止它。

让我们看看您的课程Plumber的内容及其实例化。

class Plumber
{
   Plumber obj = new Plumber();
}

您认为在创建new Plumber()对象时该怎么做。 它将实例化一个new Plumber()obj,这反过来又创建了另一个new Plumber()obj.obj,依此类推..

您确实可以将一个对象保持为Plumber,但要真正对其进行初始化,则需要特定的流程。

class Plumber
{
   Plumber obj;
   public Plumber()
   {
      if(/*condition*/)
      {
         obj = new Plumber();
      }
   }

   // You can also use some methods to do so
   public InstantiateObj()
   {
      obj = new Plumber();
   }
}
,

这是因为您没有实例化SingleInheritance类。 代码

public class SingleInheritance {

    SingleInheritance obj=new SingleInheritance(); 

    public static void main(String[] args) {
        Plumber rahul=new Plumber();   
    }
}

因为SingleInheritance是静态函数,所以没有创建main的新实例。

如果您将代码更改为:

public class SingleInheritance {

    SingleInheritance obj=new SingleInheritance(); 

    public static void main(String[] args) {
        SingleInheritance rahul=new SingleInheritance();   
    }
}

您将得到相同的Stackoverflow异常,因为现在main将实例化SingleInheritance。获得Stackoverflow的原因是new Plumber()像其他答案一样解释了自己的构造函数。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...