gpt4 book ai didi

java - 为什么 Java 类可以在方法中声明并初始化该类的对象?

转载 作者:行者123 更新时间:2023-11-30 06:02:43 27 4
gpt4 key购买 nike

我有以下代码示例:

public class example {

// class constructor
public example(){}

public void foo() {
example o = new example();
...
}
}

为什么可以编译并运行它而不是导致 StackOverflowError

最佳答案

您声称这会导致 StackOverflowError。但是,仅当方法无限期地直接或间接调用自身时,才会发生 StackOverflowError。

在您的情况下,foo 必须调用自身才能发生堆栈溢出。让我们看看 foo 做了什么。

example o = new example();

当调用 foo 时,它会调用您在此处声明的 example 的构造函数:

public example(){}

构造函数在返回之前不执行任何操作。现在构造函数已返回,o 被分配给新创建的实例,并且 foo 返回,因为它没有其他事情可做。请注意,foo 尚未被再次调用。

您的误解可能是您错误地认为当调用构造函数时,也会调用该类的所有方法。这是不正确的,除非您实际调用构造函数中的方法:

public example(){ foo(); } // this will cause stack overflow

关于java - 为什么 Java 类可以在方法中声明并初始化该类的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53844665/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com