Java 为什么我要面对这个问题?什么是工作流

Java 为什么我要面对这个问题?什么是工作流,java,Java,请任何人帮助理解下面代码中运行时的StackOverflower错误。 我不能理解工作流程。 面试问题之一:) 每次实例化访谈时,您都在创建一个新的访谈。这将导致构造函数调用和实例化的无休止循环,最终耗尽堆栈空间(因为函数调用占用堆栈空间) 请注意,如果您有无限的堆栈空间可用,则最终会从堆上分配的所有对象中失败。您的构造函数正在初始化自身。对于JVM来说,您的构造函数就是这样的: Interview i1; Interview(){ super(); i1 = new Inter

请任何人帮助理解下面代码中运行时的StackOverflower错误。 我不能理解工作流程。 面试问题之一:)


每次实例化
访谈时,您都在创建一个新的
访谈
。这将导致构造函数调用和实例化的无休止循环,最终耗尽堆栈空间(因为函数调用占用堆栈空间)


请注意,如果您有无限的堆栈空间可用,则最终会从堆上分配的所有
对象中失败。

您的构造函数正在初始化自身。对于JVM来说,您的构造函数就是这样的:

Interview i1;
Interview(){
    super();
    i1 = new Interview(); // this line calls the constructor
    System.out.println("Hello");
}

因为一旦你在
main()
中初始化第一个
Interview()
,它就会创建并初始化第二个
Interview
,这会创建并初始化另一个,依此类推
表示每个
访谈
都有属于它的
访谈
对象,因此,一旦您在
main
中调用
新建访谈()
,系统将开始尝试为该访谈创建一个新的
访谈
,并为该访谈创建一个新的
访谈


它甚至从来没有到达(显式的)构造函数,因为系统首先进入了一个永无止境的新
采访链。几乎可以肯定的是,您应该从
访谈
类中删除
i1
字段。

在字段中执行的所有初始化都将成为无参数构造函数的一部分(在您的情况下)

因此,您的代码将成为

public class Interview 
{

    Interview i1;
    Interview()
    {
        super();//by default calls the constructor of Object
        i1 = new Interview();//initialization becomes part of constructor
        System.out.println("Hello");
    }

}
现在,这会递归地使面试不稳定,导致异常

这个词对你来说意味着什么?
public class Interview 
{

    Interview i1;
    Interview()
    {
        super();//by default calls the constructor of Object
        i1 = new Interview();//initialization becomes part of constructor
        System.out.println("Hello");
    }

}