异常捕获机制中的return

查了很多资料,大家对于java中异常捕获机制的return说法很多,下面总结自己一些遇到的情况


1.finally中没有return如下

public class Test{

public static void main(String [] args){

int a = 0;

System.out.println(test(a));

}

public static int test(int a){

try {

// a = a/0;

return a++;

}catch (Exception e) {
return a
++;
}finally{
System.out.println("执行了finally");
}

}

}

结果:执行了finally

            0

分析:执行到静态方法test时,执行try中语句时,虚拟机会对return语句后面值分配内存空间,没有遇到异常,catch块中语句不会执行,try块中语句先执行return后面的a++,将a++的值装载到内存空间,然后执行finally块中的语句,最后执行return,返回内存空间中的值0;当try块中出现异常,例如在return a++前加上a = a/0,try块中的return语句不会执行,接着执行catch中的语句,同上所述,先执行catch块中return后面的语句,然后执行finally块中语句,最后return跳出异常捕获机制,返回值0。


2.finally中有return,代码如下

public class Test{

public static void main(String [] args){

int a = 0;

System.out.println(test(a));

}

public static int test(int a){

try {

// a = a/0;

return a+1;

}catch (Exception e) {
return a
+1;
}finally{
System.out.println("执行了finally")
;

return a+2;
}

}

}

结果:执行了finally

    2

分析:同理,虚拟机会对return后面语句分配内存空间,用来装载缓存return后面结果值,当程序执行到try块中的return语句时,会先将值1保存早内存空间,然后执行finally块中语句,在执行到return语句时,将原内存空间中的值1替换为值2,try中return不会执行,finally中return直接跳出异常捕获机制把值传送给调用者。try中有异常时同上分析。

注:finally中出现return语句在实际开发中是没有意义的,它的出现会使try和catch中的return失去作用,因此java编译器在编译时也会提示警告!



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值