Java异常捕捉中的finally 的用法

在进行异常捕获时,因为异常会引发程序跳转,导致有些语句执行不到,无法满足这个需求,因此Java在捕获异常时提供了解决方案。

捕获是的结构:try    catch    finally   

finally 代码块中的代码是一定会执行的(无论以前的代码是怎样的:已经在前面的代码中有return finally中的代码还是会执行)

注意在强制性退出的情况下finally 中的代码也不会执行(exit(0))

————————————————————————————————————————————————————————————————————————————————————————————————————————

finally 的使用情景

 举例:向数据库里添加数据;

添加数据:1.连接数据库

2.添加数据//  添加数据时发生了异常。throw new SQLException(); 程序跳转,就执行不了断开连接

//但是断开操作是必须要执行的,不执行断开操作,连接资源就会被浪费(对应的接口会一直处理这个异常)

3.断开连接

抽象的代码格式

1.连接数据库

try{

    //添加数据//考虑到异常的发生

}

catch(     ){

//解决数据库的问题

//同时将问题告诉调用者

}

finally{

//3.断开连接

}

总结:finally 到底什么时候用?

只要程序中使用到了具体的资源(数据库,IO 资源 ,网络连接socket 等)需要释放,都必须定义在finally 中。在定义程序时,无论问题发生与否,制定的语句都要执行,此时就要定义在finally 代码块中

————————————————————————————————————————————————————————————————————————————————————————————————————————

一段有趣的代码:

class Test{
    int show(int num){
        try {
            if (num < 0) {
                throw new RuntimeException("参数错误!!");
            }
            return 4;
        }
        catch(RuntimeException Ex) {
            System.out.println(Ex.toString());
            return 400;
        }
        finally{
            return 100;
        }
    }
}

1.num为4输出——4

2.num为-4输出——100——没有finally 输出为400

当finally 中有结束时,最终的结束状态由finally 中的语句决定

可以结束函数的语句:return /异常

直接退出:exit(0);    finally 也是拯救不了的

————————————————————————————————————————————————————————————————————————————————————————————————————————

try   catch   finally 的组合方式(必要掌握)

1.try  catch:对代码进行异常检测,并将异常传递给catch 进行处理——对 异常进行捕获

try{

    throw new Exception();

}catch( Exception ex){

//给出处理方式

}

2.try  finally:对代码进行异常检测,检测到后没有catch 所以一样会需要声明给JVM 认为是没有捕获处理的

try{

throw new Exception();

}finally{

//一定要执行的语句

}

//检测到异常后但是却想不到解决异常的方法(是为没有进行捕获处理,还需要声明throws  Exception)但是有一定要执行的当代码语句

3.完整的使用:try   catch   finally:检测得到异常,并传递给catch 处理,并定义资源释放

4.try catch1 catch2 ....:catch   的个数取决于try  中向catch   传了多少个异常

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值