try catch finally_Java中 try catch finally 中的返回值问题
问题补充:
public static int show() {
int res = 6;
try {
res = 6 / 0;
return res;
} catch (Exception e) {
System.out.println("xxxxxxxxx");
res = -1;
return res;
} finally {
res = 10;
res = 6;
System.out.println("yyyyyyyyyy");
}
这个返回值求解 稍微详细点
最佳答案
因为你程序中有
res = 6 / 0;
除0错,产生异常,所以先会输出
xxxxxxxxx
对JAVA的异常处理,在返回(return res)前肯定会执行finally 中的内容,所以会输出
yyyyyyyyyy
这个是在res = -1;后面执行的,所以show()最终会返回-1
追问:
不能理解的是finallly中的res=10的语句为啥不能把-1覆盖掉呢? fianlly不是在return之前执行么.? 按照这个逻辑应该输出6呀! 但是工具都是输出-1的。难道返回值是一个队列么? 先进先出不产生覆盖??
这个是有点难理解,但JAVA编译器有确是在return前执行finally 中内容的,也许是编译器的优化问题.将res = -1;return res;直接优化为return -1;了你若在System.out.println("yyyyyyyyyy");后面加return res;结果就是6
最佳答案由网友 whoami1978 提供
其他回答
暂无其它回答!