java里面try,catch,finally异常捕捉

java里面try,catch,finally异常捕捉

程序块出现异常,需要用try,catch来捕捉,形如:
try{
//代码区
}catch(Exception e){
//异常处理
}
如果没有try,出现异常会导致程序直接崩溃,而try则可以保证程序正常
运行下去,输出错误信息,比如:
try{
int i = 1/0;
}catch(Exception e){
……..
}
因为除数为0,如果没有try的话,程序直接崩溃,用try的话则可以让程序
跳转到catch里面,继续运行下去,输出错误信息。
与此同时,finally也是与try和catch很常见的搭配,形如:
try{
//代码区
}catch(Exception e){
//异常处理
}finally{
//必须执行
}
在上述代码中,不管有没有捕捉到异常,finally代码块都将会执行,那么
问题来了,如果有这样的函数,最终会返回什么结果:
public int test(){

try{
int m=10/0;
System.out.println(“a”);
return 1;
}catch(Exception e){
System.out.println(“b”);
return 2;
}finally{
System.out.println(“c”);
return 3;
}

}
最后的执行结果为 b,c,函数返回值为3;因为在try中除数为0,抛出异常,
后面的语句不会执行,所以不会输出a,转而执行catch里面的代码,所以
输出b,因为不管有没有异常,finally代码块必须执行,因此,程序在执行
return 2;之前会转而执行finally里面的代码,因此输出c,然后执行return 3;
至此程序结束,函数返回3,一个函数执行了return是不会跳转到函数体内部
再去执行return 2;语句的。在这个例子中,即使除数不为0,try里面没有
异常,程序依然会在执行return 1;之前去执行finally,结果仍将是返回3。
至此,我们发现了一个问题:即使出现了异常,程序依然返回了一个数值,
我们所写的异常捕捉没有起到任何作用。导致这个问题的罪魁祸首就是在finally代码中用到了return 语句。

总结:鉴于finally代码块不管出没出现异常都会执行的特点,可以得出finally最好的作用就是释放资源,与此同时一定要避免在finally代码块里出现return语句。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值