总结:
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。
网友评论