A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Qiubang 中级黑马   /  2016-1-26 22:16  /  859 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

8 个回复

倒序浏览
finally语句块必须执行  finally先执行
回复 使用道具 举报
本帖最后由 参禅悟道 于 2016-1-27 10:49 编辑

finally肯定会执行的:其实写个例子就知道上面这张图就是最好的证明,你自己把代码写一遍,设个断点,走一遍就什么都知道了。

不好意思哈,这个用C#代码写的,因为习惯了。
不过代码基本原理都一样,写法不同而已。
第二张图片又用java执行了一下。try,finally分别都打印出来了

QQ截图20160127100229.png (78.87 KB, 下载次数: 7)

C#

C#

QQ图片20160127104807.png (113.67 KB, 下载次数: 10)

java

java
回复 使用道具 举报
楼上讲解的详细
回复 使用道具 举报
参禅悟道 发表于 2016-1-27 10:01
finally肯定会执行的:其实写个例子就知道上面这张图就是最好的证明,你自己把代码写一遍,设个断点,走一 ...

谢谢,明白了
回复 使用道具 举报
只有一种结果 try语句中强制退出jvm  System.out.exit【0】; finally就执行不到
回复 使用道具 举报
finally先执行。
回复 使用道具 举报
finally代码块先执行,但是return是先将返回路径计算好,并没有执行返回。
例子:
  1. public int test() {
  2.     try {
  3.            int num=10;
  4.            return num;
  5.      }finally {
  6.            num=20;   
  7.      }
  8. }
复制代码

返回结果会是10,但仍然是finally语句块先执行
回复 使用道具 举报
厉害 学习一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马