参考资料:《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语句的前提

最新文章

  1. Java三大框架之——Hibernate
  2. 【转】用JitPack发布开源库时附加文档和源码
  3. 《《我是一只IT小小鸟》》读后感
  4. C/C++定义全局变量/常量几种方法的区别
  5. 将CMD内的显示内容输出到txt文件
  6. ASP.NET - 获得客户端的 IP 地址
  7. C#调用C++动态库时类型转换
  8. C++读取excel特定行列中的数据
  9. ViewPager实现无限轮播踩坑记
  10. js取整并保留两位小数的方法
  11. jquery 实现拖动文件上传加进度条
  12. Golang学习笔记:channel
  13. Shell命令-文件及内容处理之vi、vim
  14. react连连看
  15. JS 判断各种设备,各种浏览器
  16. blob对象的应用
  17. (33)关于django中路由自带的admin + 建表关系的讲解
  18. Aria2GUI 导出下载 刷新界面,任务消失
  19. html里<div> <br /> <p>三者区别
  20. C99中的变长数组(VLA)

热门文章

  1. 本地向服务器上传文件的方式-FTP工具上传
  2. 就改了get,却不让我set?——Java内省机制的神奇行为举止一例
  3. java集合之ArrayList链表基础
  4. .NET Core 3.0 里新的JSON API
  5. Java线程池构造参数详解
  6. python字符的各种处理,不用内置函数总结
  7. java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: NO)报错
  8. JdbcTemplate实现增删改查操作
  9. Xbim.GLTF源码解析(三):Builder类
  10. JS设置和获取盒模型的宽和高