finally与return执行循序 Java

java语言中,在try-catch-finally语句中,我们知道只要程序进入try-catch-finally语句,finally就一定会执行,但是如果try语句或者是catch语句中含有return语句,这时候finally语句还会不会执行呢?或者return和finally语句哪个先执行?

下面请看例子。

例子1:

public class Finally {
public static void main(String[] args){
System.out.println(test());
}
public static int test(){
int b = 1;
try {
System.out.println("try子块");
return b+=10;
} catch (Exception e) {
System.out.println("catch子块");
// TODO: handle exception
} finally {
System.out.println("finally子块");
if(b>3){
System.out.println("b = "+b);
}
}
return b-=5;
}
}

执行结果为:

try子块
finally子块
b = 11
11

由此可知程序先执行了try{}中的return语句,但是并没有立刻返回,跳出test(),而是继续执行finally{}语句,在执行完finally{}语句后,才返回了try中的return值。

你可能已经觉得问题已经很清楚了,但是如果finally语句中也有return语句呢,这时候test()函数返回的到底是try{}中的return值还是finally中的值?看下面的例子。

例子2:

public class Finally {
public static void main(String[] args){
System.out.println(test());
}
public static int test(){
int b = 1;
try {
System.out.println("try子块");
return b+=10;
} catch (Exception e) {
System.out.println("catch子块");
// TODO: handle exception
} finally {
System.out.println("finally子块");
if(b>3){
System.out.println("b = "+b);
}
return b-=5;
}
}
}

执行结果为:

try子块
finally子块
b = 11
6

由此可见,虽然try{}语句中有return 11,但是test()最终返回的并不是该return 值,而是finally中返回的return 6。因此,当finally中有return语句时,该return语句会覆盖掉原来try{}中的语句。

综上所述:当try中有return语句时,会先执行return语句,但不会立刻返回,而是将该return语句的值放在一个临时区。之后,将执行finally语句,finally语句执行完毕后,将返回临时区中的return值;如果finally中也有return 语句,finally中的return值会覆盖掉临时区中的return值,从而返回finally中的return值。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值