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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韦念欣 黑马帝   /  2012-6-30 08:37  /  1451 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 韦念欣 于 2012-6-30 09:15 编辑

大家看一下这段代码,很奇特,一眼看上去,输出的应该是true,可是真正运行起来的时候却是false。
为什么呀?
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 System.out.println(decision());             // 输出判断结果
  6.         }

  7.         public static boolean decision()
  8.         {
  9.                 try
  10.                 {
  11.                         return true;
  12.                 }
  13.                 finally
  14.                 {
  15.                         return false;
  16.                 }
  17.         }
  18. }
复制代码

3 个回复

倒序浏览
关于return 和 finally一起使用时的执行顺序在坛子里已讨论的不少了,建议楼主翻翻老帖子。
先计算return后面的表达式的值,将值临时存储起来,然后计算finally里的return后的表达式值,算出后也会临时存储,此时就会把之前存储的值给覆盖掉。最后,回到前一个return处,从临时存储变量的地方把值拿出来,返回。即得到了这样的结果。
回复 使用道具 举报
return语句并不会立即返回结果,而是将其缓存了一下,当使用了finally语句时,最终结果被finally 中的代码进行了修改。
论坛里这样的例子讨论过多次了,finally到底是在什么时刻执行?
如果存在System.exit();就执行不到;
如果存在return,是在return之后,真正的结果返回之前;
没有return的话,就是finally所属代码块中最后执行。
回复 使用道具 举报
原来是先存起来的,我明白了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马