java异常处理:finally中不要return

探讨Java异常处理中finally块内return语句的使用误区,解析其可能导致的逻辑错误及异常捕捉失败的问题,强调finally块应仅用于资源释放。
java异常处理:finally中不要return
 

复制代码
public class Ex1 {

    public static void main(String[] args) {
        System.out.println(Ex1.getResult());
    }

    public static int getResult(){
        int a =100;
        
        try{
            return a+10; //注意,java的基础数据类型是值传递,这里的返回值已经和上面的a没有关系了
        }catch(Exception e){
            e.printStackTrace();  
        }finally{
            return a;    //最后再把值重定向到a(相当于将try中的返回值覆盖掉),所以输出还是100
        }
    }
}
复制代码
 再看一个例子:

 

复制代码
public class Ex1 {

    public static void main(String[] args) {
        try{
        System.out.println(Ex1.getResult());
        }catch(Exception e){
            e.printStackTrace();
            System.out.println("截获异常catch");
        }finally{
            System.out.println("异常处理finally");
        }
    }

    public static int getResult() throws Exception{
        int a =100;
        
        try{
            
            a=a+10; 
            throw new RuntimeException();
        }catch(Exception e){
            System.out.println("截获异常并重新抛出异常");
            throw new Exception();            
        }finally{
            return a;
        }
    }
}
复制代码
输出如下:

截获异常并重新抛出异常
110
异常处理finally
关键的“截获异常catch”却没有执行!!!

原因是在getResult()的finally中return一个值,等同于告诉编译器该方法没有异常,但实际上异常是有的,这样的结果是该方法的调用者却捕获不到异常,相对于异常被无端的被吃掉了,隐藏杀机啊!!

结论:不要再finally中试图return一个值,这样可能会导致一些意想不到的逻辑错误,finally就是用来释放资源的!!

 

转载于:https://www.cnblogs.com/wzhanke/p/4778654.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值