读书人

[转]解析Java finally的奥妙面纱

发布时间: 2013-05-02 09:39:29 作者: rapoo

[转]解析Java finally的神秘面纱

问题分析?

首先来问大家一个问题:finally 语句块一定会执行吗??
很多人都认为 finally 语句块是肯定要执行的,其中也包括一些很有经验的 Java 程序员。可惜并不像大多人所认为的那样,对于这个问题,答案当然是否定的,我们先来看下面这个例子。?
清单 1.

  1. 另外,如果去掉上例中被注释的两条语句前的注释符,执行结果则是:

    1. public?class?Test?{?public?static?void?main(String[]?args)?{?
    2. "return?value?of?getValue():?"?+?getValue?
    3. @SuppressWarnings("finally")?
    4. public?static?int?getValue()?{?????????int?i?=?1;?
    5. try?{??????????????????i?=?4;?
    6. finally?{??????????????????i++;?
    7. return?i;?????????}?
    8. public?class?Test?{?public?static?void?main(String[]?args)?{?
    9. "return?value?of?getValue():?"?+?getValue?
    10. public?static?int?getValue()?{?
    11. int?i?=?1;?????????try?{?
    12. 4;?????????}?finally?{?
    13. return?i;?}?
    14. public?class?Test?{?public?static?void?main(String[]?args)?{??
    15. public?static?String?test()?{??
    16. try?{??System.out?
    17. "try?block");??return?test1?
    18. finally?{??
    19. "finally?block");??
    20. public?static?String?test1()?{??System.out?
    21. "return?statement");??return?"after?return";??
    22. return?tmp;??

    这样,就应该清楚为什么是上面所示的执行结果了吧!?

    好了,就写到这吧!希望大家看完这篇文章能够有所收获!?

    总结?
    没想到吧!一个小小的、看似简单的 finally 语句块背后居然隐藏了这么多玄机。看来,我们平时还是应该认真的阅读 Java 相关的基础文档,比如:Java 语言规范、Java 虚拟机规范等,很多棘手的问题都可以从中得到答案。只有真正的吃透了基础知识,才能达到运用自如的境界!

    原文链接:http://run-wang.iteye.com/blog/1262063

读书人网 >编程

热点推荐