[转]解析Java finally的奥妙面纱
[转]解析Java finally的神秘面纱问题分析?首先来问大家一个问题:finally 语句块一定会执行吗??很多人都认
[转]解析Java finally的神秘面纱
问题分析?
首先来问大家一个问题:finally 语句块一定会执行吗??
很多人都认为 finally 语句块是肯定要执行的,其中也包括一些很有经验的 Java 程序员。可惜并不像大多人所认为的那样,对于这个问题,答案当然是否定的,我们先来看下面这个例子。?
清单 1.
另外,如果去掉上例中被注释的两条语句前的注释符,执行结果则是:
- public?class?Test?{?public?static?void?main(String[]?args)?{?
- "return?value?of?getValue():?"?+?getValue?
- @SuppressWarnings("finally")?
- public?static?int?getValue()?{?????????int?i?=?1;?
- try?{??????????????????i?=?4;?
- finally?{??????????????????i++;?
- return?i;?????????}?
- public?class?Test?{?public?static?void?main(String[]?args)?{?
- "return?value?of?getValue():?"?+?getValue?
- public?static?int?getValue()?{?
- int?i?=?1;?????????try?{?
- 4;?????????}?finally?{?
- return?i;?}?
- public?class?Test?{?public?static?void?main(String[]?args)?{??
- public?static?String?test()?{??
- try?{??System.out?
- "try?block");??return?test1?
- finally?{??
- "finally?block");??
- public?static?String?test1()?{??System.out?
- "return?statement");??return?"after?return";??
- return?tmp;??
这样,就应该清楚为什么是上面所示的执行结果了吧!?
好了,就写到这吧!希望大家看完这篇文章能够有所收获!?
总结?
没想到吧!一个小小的、看似简单的 finally 语句块背后居然隐藏了这么多玄机。看来,我们平时还是应该认真的阅读 Java 相关的基础文档,比如:Java 语言规范、Java 虚拟机规范等,很多棘手的问题都可以从中得到答案。只有真正的吃透了基础知识,才能达到运用自如的境界!
原文链接:http://run-wang.iteye.com/blog/1262063