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语句的前提

  • 相关阅读:
    如何看待和选择基础设施软件
    target vs currentTarget, clientWidth vs offsetWidth
    undefined
    C# and android and socket
    hdu 4781 Assignment For Princess (2013ACMICPC 成都站 A)
    [置顶] Jquery中DOM操作(详细)
    hdu 4786 Fibonacci Tree (2013ACMICPC 成都站 F)
    android开发教程(八)——环境搭建之java-ndk
    cloudstack4.2+xenserver6.0.2 详细配置攻略
    11道php面试题
  • 原文地址:https://www.cnblogs.com/lbhym/p/11860970.html
Copyright © 2011-2022 走看看