gpt4 book ai didi

java - try catch finally 返回值的顺序

转载 作者:行者123 更新时间:2023-12-03 21:42:50 26 4
gpt4 key购买 nike

我使用此代码来测试 try catch 最后:

public class My{
public static void main(String[] args) {
System.out.println(fun1());
System.out.println(fun2());
}

public static int fun1() {
int a = 1;
try {
System.out.println(a / 0);
a = 2;
} catch (ArithmeticException e) {
a = 3;
return a;
} finally {
a = 4;
}
return a;

}

public static int fun2() {
int a = 1;
try {
System.out.println(a / 0);
a = 2;
} catch (ArithmeticException e) {
a = 3;
return a;
} finally {
a = 4;
return a;
}

}
}
输出:
3
4
我知道 finally 将永远运行。我认为这两个函数的结果应该是4,但实际上 fun1()是 3 和 fun2()是 4. 为什么?

最佳答案

这个问题密切相关,虽然它返回文字而不是变量:Multiple returns: Which one sets the final return value?
fun1返回值通过 return a 设置在捕获块中。在该行 a 的值被复制到返回值中。换 a稍后不会更改返回值。
fun2您在 finally 中有明确的返回块,所以 finally 块中的返回值就是返回的值。
请仔细阅读上述问题中的答案,了解为什么不应该编写这样的代码。
另一个相关问题是:Returning from a finally block in Java

关于java - try catch finally 返回值的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66416920/

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