深入浅析java中finally的用法

2025-05-29 0 22

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

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

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

?

1

2

3

4

5

6

7

8

9

10

11

12
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的用处现在就能体现出来了

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19
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用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对快网idc网站的支持!

原文链接:https://blog.csdn.net/u010029439/article/details/80551857

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 深入浅析java中finally的用法 https://www.kuaiidc.com/111579.html

相关文章

发表评论
暂无评论