黑马程序员技术交流社区
标题:
一段奇特的异常处理代码
[打印本页]
作者:
韦念欣
时间:
2012-6-30 08:37
标题:
一段奇特的异常处理代码
本帖最后由 韦念欣 于 2012-6-30 09:15 编辑
大家看一下这段代码,很奇特,一眼看上去,输出的应该是true,可是真正运行起来的时候却是false。
为什么呀?
class Demo
{
public static void main(String[] args)
{
System.out.println(decision()); // 输出判断结果
}
public static boolean decision()
{
try
{
return true;
}
finally
{
return false;
}
}
}
复制代码
作者:
赵兵锋
时间:
2012-6-30 09:09
关于return 和 finally一起使用时的执行顺序在坛子里已讨论的不少了,建议楼主翻翻老帖子。
先计算return后面的表达式的值,将值临时存储起来,然后计算finally里的return后的表达式值,算出后也会临时存储,此时就会把之前存储的值给覆盖掉。最后,回到前一个return处,从临时存储变量的地方把值拿出来,返回。即得到了这样的结果。
作者:
黄连兵
时间:
2012-6-30 09:10
return语句并不会立即返回结果,而是将其缓存了一下,当使用了finally语句时,最终结果被finally 中的代码进行了修改。
论坛里这样的例子讨论过多次了,finally到底是在什么时刻执行?
如果存在System.exit();就执行不到;
如果存在return,是在return之后,真正的结果返回之前;
没有return的话,就是finally所属代码块中最后执行。
作者:
韦念欣
时间:
2012-6-30 09:14
原来是先存起来的,我明白了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2