试问,若在try语句块里有一个return语句,同时这个try语句块后面还有一个finally语句块,请问finally语句块里的代码会不会被执行?若答案是肯定的,那么会在什么时候被执行?是在retu

来源:互联网 发布:51单片机视频教程下载 编辑:程序博客网 时间:2024/05/17 06:38

这是一个很有趣的问题,我测试的结果是:是在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-1010  */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

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


0 0
原创粉丝点击