gpt4 book ai didi

java - 当类的实例本身被创建时,为什么构造函数中的语句不被执行?

转载 作者:行者123 更新时间:2023-11-30 05:41:55 26 4
gpt4 key购买 nike

当一个类被实例化时,它的构造函数就会被调用。在此示例中,我想检查何时发生 StackOverflow 错误。但是构造函数中声明的语句并没有被执行,为什么呢?看下面的代码

public class StackOverFlowSampleMain {
StackOverFlowSampleMain oomeSampleMain = new StackOverFlowSampleMain();
static int x = 0;

StackOverFlowSampleMain() {
x++; //aren't these lines supposed to be executed?
System.out.println(x);
}

public static void main(String[] args) {
StackOverFlowSampleMain oomeSampleMain = new StackOverFlowSampleMain();

}
}

最佳答案

成员初始化发生在构造函数主体之前。因此,当您创建 StackOverFlowSampleMain 实例时,它所做的第一件事就是初始化其 oomeSampleMain 成员。反过来,它会尝试初始化自己的 oomeSampleMain 成员,依此类推,直到程序因 StackOverflowError 崩溃,因此 x 的递增> 只是从未达到。

如果您想测量 StackOverflowError 何时发生,您可以将导致它的代码移至构造函数的末尾:

public class StackOverFlowSampleMain {
StackOverFlowSampleMain oomeSampleMain;
static int x = 0;

StackOverFlowSampleMain() {
x++;
System.out.println(x);
oomeSampleMain = new StackOverFlowSampleMain(); // Here, after x is printed
}
}

关于java - 当类的实例本身被创建时,为什么构造函数中的语句不被执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55487222/

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