zoukankan      html  css  js  c++  java
  • try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,还是在return之后执行?

    这是一个很有趣的问题,我测试的结果是:是在return中间执行。

    我在网上搜寻了一些资料,下面是参考代码:

     1 /**
     2  * 
     3  */
     4 package com.b510.test;
     5 
     6 /**
     7  * try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,还是在return之后执行?
     8  * @author Hongten
     9  * @date 2013-12-10
    10  */
    11 public class TestC {
    12 
    13     @SuppressWarnings("static-access")
    14     public static void main(String[] args) {
    15         System.out.println("结果: " + new TestC().test());
    16     }
    17     
    18     static int test(){
    19         int i = 1;
    20         try {
    21             System.out.println("try里面的i : " + i);
    22             return i;
    23         }finally{
    24             System.out.println("进入finally...");
    25             ++i;
    26             System.out.println("fianlly里面的i : " + i);
    27         }
    28     }
    29 }

    输出结果:

    try里面的i : 1
    进入finally...
    fianlly里面的i : 2
    结果: 1

    下面是我在debug时,抓取的图片:

    上图是程序执行到try模块里面:变量"i"的值的情况。

    上图是程序执行到了try模块中的return语句时,按下F5键,进入到finally模块,执行finally模块中的语句后,变量"i"的值发生了变化。

    上图是当程序执行完finally模块后,返回到return代码块。

    但是在最后的运行效果中,我们看到的结果是:1,而不是我们想象中的:2

    为什么会出现这样的情况:

    上面我认为比较靠谱的一种解释。

    还有一种解释为:

    主函数调用子函数并得到结果的过程,好比主函数准备一个空罐子,当子函数要返回结果时,先把结果放在罐子里,然后再将程序逻辑返回到主函数。所谓返回,就是子函数说,我不运行了,你主函数继续运行吧,这没什么结果可言,结果是在说这话之前放进罐子里的。

    ========================================================

    More reading,and english is important.

    I'm Hongten

     

    大哥哥大姐姐,觉得有用打赏点哦!多多少少没关系,一分也是对我的支持和鼓励。谢谢。
    Hongten博客排名在100名以内。粉丝过千。
    Hongten出品,必是精品。

    E | hongtenzone@foxmail.com  B | http://www.cnblogs.com/hongten

    ========================================================

  • 相关阅读:
    LeetCode 485. Max Consecutive Ones
    LeetCode 367. Valid Perfect Square
    LeetCode 375. Guess Number Higher or Lower II
    LeetCode 374. Guess Number Higher or Lower
    LeetCode Word Pattern II
    LeetCode Arranging Coins
    LeetCode 422. Valid Word Square
    Session 共享
    java NIO
    非阻塞IO
  • 原文地址:https://www.cnblogs.com/hongten/p/hongten_java_finally.html
Copyright © 2011-2022 走看看