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语句的前提
最新文章
- Java三大框架之——Hibernate
- 【转】用JitPack发布开源库时附加文档和源码
- 《《我是一只IT小小鸟》》读后感
- C/C++定义全局变量/常量几种方法的区别
- 将CMD内的显示内容输出到txt文件
- ASP.NET - 获得客户端的 IP 地址
- C#调用C++动态库时类型转换
- C++读取excel特定行列中的数据
- ViewPager实现无限轮播踩坑记
- js取整并保留两位小数的方法
- jquery 实现拖动文件上传加进度条
- Golang学习笔记:channel
- Shell命令-文件及内容处理之vi、vim
- react连连看
- JS 判断各种设备,各种浏览器
- blob对象的应用
- (33)关于django中路由自带的admin + 建表关系的讲解
- Aria2GUI 导出下载 刷新界面,任务消失
- html里<;div>; <;br />; <;p>;三者区别
- C99中的变长数组(VLA)
热门文章
- 本地向服务器上传文件的方式-FTP工具上传
- 就改了get,却不让我set?——Java内省机制的神奇行为举止一例
- java集合之ArrayList链表基础
- .NET Core 3.0 里新的JSON API
- Java线程池构造参数详解
- python字符的各种处理,不用内置函数总结
- java.sql.SQLException: Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: NO)报错
- JdbcTemplate实现增删改查操作
- Xbim.GLTF源码解析(三):Builder类
- JS设置和获取盒模型的宽和高