try-catch-finally-return问题

总结:
1、不管有木有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,若finally中无return,则不管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),该情况下函数返回值是在finally执行前确定的;
4、finally中最好不要包含return,否则程序不会在try块中返回,而是从finally块中直接退出,返回值不是try或catch中保存的返回值。

以下为转发内容:
原文链接:
try-catch-finally-return问题详解
具体内容如下:
(1)try里有一个return语句,那么紧跟在这个try后的finally里的代码会不会被执行,什么时候执行,在return前还是后;
代码1:


执行结果:

(2)如果finally也有return代码 ,那执行结果是?
代码2:

执行结果:

注:finally里的return覆盖掉了try里的return;
(3)如果try后面有个catch块,里面有return语句,那么finally语句会不会执行?
代码:

执行结果:

在finally块里也加上return语句:

结果:

注:如果finally里没有return语句,而catch里有return语句,则执行catch里的return语句;
而如果finally里也有return语句,则返回finally里的return语句;即catch块不会影响finally的执行;
finally语句块的作用就是为了保证无论出现什么情况,一定要执行的,那么finally里的代码肯定会执行,并且是在return前执行
又如:执行结果是多少呢;

执行结果:

注:并不是try语句中return执行完之后才执行的finally;
而是在执行return b+=88时,分成了两步,先b+=88;再return b;
将return temp;放到System.out.println("finally块");后面,输出结果不变;
如果将finally语句改为:

如果finally没有返回语句覆盖的话,那原来的返回值就不会变,不管你是不是改变了要返回的哪个变量,所以返回的值依然不变,还是会返回111。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容