gpt4 book ai didi

java - 即使在 StackOverflow 之后代码也能正常工作 - 怎么样?

转载 作者:行者123 更新时间:2023-11-29 10:08:35 25 4
gpt4 key购买 nike

根据我的理解,下面的代码应该打印 0 作为输出,因为堆栈已满并且它应该立即退出方法。

但是,当我运行以下代码时,第一种情况打印 100,第二种情况打印 1:

class ErrorAndException {
public static int callStackOverflow() {
try {
callStackOverflow();
return 100;
} catch (Error e) {
System.out.println(e);
return 0;
} finally {
}
}

public static void main(String[] args) {
System.out.println(callStackOverflow());
}
}

案例 - 2

class ErrorAndException {
public static int callStackOverflow() {
try {
callStackOverflow();
return 100;
} catch (Error e) {
System.out.println(e);
return 0;
} finally {
return 1
}
}

public static void main(String[] args) {
System.out.println(callStackOverflow());
}
}

请帮助我理解这种行为。

最佳答案

只有对 callStackOverflow() 的最后一次调用(抛出 StackOverflowError 的调用)才会返回 0。但是当它返回时,之前对 callStackOverflow() 的调用都返回 100。您的 main 方法仅打印对 callStackOverflow()< 的初始调用返回的值,即 100

如果您希望 0 返回到 main 方法,callStackOverflow() 必须返回递归返回的值调用:

public static int callStackOverflow() {
try {
return callStackOverflow();
} catch (Error e) {
System.out.println(e);
return 0;
} finally {
}
}

关于java - 即使在 StackOverflow 之后代码也能正常工作 - 怎么样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55676374/

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