zoukankan      html  css  js  c++  java
  • try-with-resources优先于try-finally

    参考资料:《Effective Java》、《Java核心技术 卷1》、https://www.cnblogs.com/flyingeagle/articles/10152925.html

    基础回顾

    1.finally子句

    当代码抛出异常时,就会终止方法中剩余代码的处理,如果这个方法获取了一些本地资源,就必须要回收这些资源。

    这时候可能就需要用到finally子句了。下列三种情况会执行finally子句:

    1.代码没有抛出异常,程序优先执行完try语句中全部的代码,然后再执行finally子句中的代码。

    2.当catch中捕获了异常,首先执行try语句中的代码,直到出现异常为止,然后跳过try语句中剩下的代码,去对应的catch中,最后执行finally语句中的代码。

    3.代码抛出异常,但是不是由catch捕获,这种情况会首先执行try语句中的代码,直到出现异常为止,然后跳过try语句中剩下的代码去执行finally子句的语句。

    注:try语句可以只有finally没有catch,也可以只有catch没有finally。

    try-with-resources

    普通的try-catch-finally语法如下:

            try{
                //业务代码
            }catch (Exception ex){
                //异常
            }finally {
                //最后执行的代码
            }

    try-with-resources语法:

    try (Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "admin");
                 Statement statement = connection.createStatement();) {//连接数据库
                //小括号声明需要的资源
                //业务代码 
            } catch (SQLException e) {
                e.printStackTrace();//try-with-resources也可以使用catch和finally子句,功能一样
            }

    与普通的try-catch-finally语句相比,主要区别是:

    1.try后面加上小括号,在小括号里完成资源的初始化,同一个小括号里可以声明多个资源。

    2.try块退出时,会自动调用close方法,这样就不用在finally里面显式的去关闭资源。

    为什么要优先使用try-with-resources呢?主要原因如下:

    如果只是一层,try-catch-finally并不会显得多么复杂。但是如果在try里面或者finally里面嵌套了其他更多的try-catch-finally,然后都需要显式的去关闭资源,会显得代码非常冗余。

    值得注意的是,实现AutoCloseable接口是使用try-with-resources语句的前提

  • 相关阅读:
    React开发实时聊天招聘工具 -第六章 登陆注册(2)
    React开发实时聊天招聘工具 -第六章 登陆注册(1)
    温习 socket http tcp
    高阶组件简介
    计算机组成原理(7)——输入、输出系统
    计算机组成原理(6)——总线
    计算机组成原理(5)——中央处理器
    计算机组成原理(4)——指令系统
    计算机组成原理(3)——存储层次结构
    计算机组成原理(2)——数据的表示与运算
  • 原文地址:https://www.cnblogs.com/lbhym/p/11860970.html
Copyright © 2011-2022 走看看