finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常),经常被用在需要释放资源的情况下。

之前在写爬虫的时候数据库连接的频率很高,有时候数据处理的不好,sql报错后,抛出异常但后边的数据库连接没有断开。导致最后数据库连接数过大,不让再连接了(因为是个人库,所以直接重启了一下)。这个释放数据库连接的操作就可以用finally来进行。

首先看一下没有用finally的代码(不能直接运行,能看懂什么意思就行)

Connection conn;

Statement stmt;

try{

conn = DriverManager.getConnection(url,userName,password);

stmt = conn.createStatement;

String sql = "sql";//需要执行的sql

stmt.executeUpdate(sql);

stmt.close();

conn.close();

}catch(Exception e){

e.printStackTrace();

}

在程序正常运行的时候,没有异常抛出,没有问题。

但在程序抛出异常(sql出错了),try里面的语句不执行了直接被执行catch里面的语句了,就造成了一个数据库连接没有正常关闭。数据量如果大起来,数据库的最大连接数到达上限,就不再允许创建新的连接了。

然后finally的用处现在就能体现出来了

Connection conn = null;

Statement stmt = null;

try {

conn = DriverManager.getConnection(url,userName,password);

stmt = conn.createStatement;

String sql = "sql";//需要执行的sql

stmt.executeUpdate(sql);

stmt.close();

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}finally{

if(stmt! = NULL){

stmt.close();

}

if(conn! = NULL){

conn.close();

}

}

这样即使sql运行出错,抛出了异常,在最后的finally代码中再进行一次数据库连接的判断,就可以保证数据库连接资源不会被平白无故的浪费掉。

以上所述是小编给大家介绍的java中finally的用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

java的finally_深入浅析java中finally的用法相关推荐

  1. java printf与println_浅析Java中print、printf、println的区别

    我们的程序员在开发的时候,都会使用到很多不同的功能,但是有些功能是大同小异,别着急,下文是爱站技术频道小编为大家带来的浅析Java中print.printf.println的区别,希望对你学习有帮助! ...

  2. java 反射 Gc_深入浅析Java反射机制

    Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反 ...

  3. java深度克隆_浅析Java中clone()方法浅克隆与深度克隆

    现在Clone已经不是一个新鲜词语了,伴随着"多莉"的产生这个词语确实很"火"过一阵子,在Java中也有这么一个概念,它可以让我们很方便的"制造&qu ...

  4. java group类_浅析Java中线程组(ThreadGroup类)

    Java中使用ThreadGroup类来代表线程组,表示一组线程的集合,可以对一批线程和线程组进行管理.可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线程,这样的 ...

  5. java 线程状态_浅析Java中的线程状态

    一.线程的5种状态 众所周知,Java的线程状态有5种,分别对应上图中五种不同颜色,下面对这5种状态及状态间的转化做相应的解释: 1. 初始化状态:新建一个线程对象 2. 可运行状态:其他线程调用了该 ...

  6. java变量同名_浅析Java中局部变量与成员变量同名解决技巧

    要想区分这哥俩,首先,我们得知道它们分别是什么.先从成员变量下刀. 成员变量 我们来研究一个事物: 属性:外在特征:例如人的身高,体重 行为:能够做什么:例如人有说话,打球等行为. 而在Java语言中 ...

  7. Java的反射作用_浅析Java 反射机制的用途和缺点

    反射的用途 Uses of Reflection Reflection is commonly used by programs which require the ability to examin ...

  8. java 越来越慢_浅析Java语言慢的原因

    Java在早期(比如JDK1.2以前)是很慢的,后续版本由于有许多优化手段的加入,Java正变得越来越快,所以现在也有很多关于Java和C/C++孰快孰慢的争论.我想就我自己的理解,谈一下影响Java ...

  9. Java的synchronized的使用_Java中synchronized的用法

    1.synchronized关键字的作用域有二种: 1)是某个对象实例内,synchronized aMethod(){}可以防止多个线程同时访问这个对象的synchronized方法(如果一个对象有 ...

最新文章

  1. 一个老产品的心路历程
  2. Gamma阶段项目展示
  3. 使用Nomad和OpenFaaS提供FaaS服务
  4. Python2/3 list set性能测试
  5. kong plugin rate limiting
  6. JavaScript实现CountingSort计数排序算法(附完整源码)
  7. 使用postman操作ElasticSearch
  8. 大学生在校期间可以考哪些证书?
  9. 力扣——LCP 37. 最小矩形面积(困难)
  10. 一次性尿袋行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  11. linux如何安装php,Linux下如何安装配置PHP
  12. linux显示磁盘使用情况命令,Linux查看磁盘使用情况命令(示例代码)
  13. Liferay7 BPM门户开发之15: Liferay开发体系简介
  14. 2019年第十届蓝桥杯A组国赛(C/C++)
  15. poi创建excel表打不开——文件格式与扩展名不匹配
  16. 练习:随机点名器案例
  17. 基于单片机的交通灯设计
  18. 跨境电商须知:Google CWV新政及应对之道(下)
  19. PS工具的导入与安装
  20. 计算机的可持续发展问题,可持续发展视角下的计算机教育优化

热门文章

  1. AutoRun.inf 文件详解
  2. SpringBoot进行接口设计
  3. 微信机器人高级版常见问题汇总
  4. 分号是c语言的结束符不是分隔符,分号在C和Pascal中的区别
  5. Linux时间管理和定时学习笔记
  6. 合作模式歌利亚机器人_歌利亚全任务流程图文攻略_歌利亚通关攻略_牛游戏网攻略...
  7. 2021-04-18 读书笔记-白鹿原
  8. SOA架构的域控制器测试解决方案
  9. Comsol电磁波模型:金属超表面光栅,TE TM偏振下斜入射不同衍射级反射光谱计算
  10. HTML5+CSS3移动商城-首页