try catch finally_Java中 try catch finally 中的返回值问题

原问题:Java中 try catch finally 中的返回值问题
分类:编程开发 > 最后更新时间:【2016-12-12 18:58:49】
问题补充:

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  提供
  • 公告: 为响应国家净网行动,部分内容已经删除,感谢网友理解。
    17

    分享到:

    其他回答

    暂无其它回答!

      推荐