weixin_42315883 2009-06-17 12:04
浏览 210
已采纳

关于try catch的问题

昨天2个同事在数据库连接释放时,讨论一个问题,是关于try catch的,在这个问题上,我也吃不太准,在这里向各位讨教一下。
代码如下:
代码片段一:
Connection conn = null;
Statement st = null;
ResultSet rs = null;
...
...
...
finally {
try{
if (rs != null) {
rs.close();
}
if (st != null) {
st.close();
}
if (conn != null) {
conn.close();
}
}catch(SQLException e){
e.printStackTrace();
}
}

代码片段二:
Connection conn = null;
Statement st = null;
ResultSet rs = null;
...
...
...
finally {
if (rs != null)
try{
rs.close();
}catch(SQLException e){
e.printStackTrace();
}

if (st != null)
try{
    st.close();
}catch(SQLException e){
    e.printStackTrace();
}

if (conn != null)
try{
    conn.close();
}catch(SQLException e){
    e.printStackTrace();
}

}

在代码片段中大家可以清晰的看到在释放Connection Statement ResultSet3个资源时,片段一将释放代码放到一个try catch快中,而片段二是放到三个try catch快中。
两个同事的争议也在这里。
写片段二代码的同事,认为写在一个try catch快中,一旦前面的资源在释放抛出异常,后面的资源就不会再释放,这点可以肯定,同时他认为如果分成3个try catch快,一旦前面的资源抛出异常,后面的资源依然会继续释放资源。
写片段一代码的同时,认为写在一个try catch快中还是写在三个try catch快中,在前面的资源释放抛出异常后,程序就中断了,后面的资源都不会再释放了。

在这里我也有些困惑,请大家谈谈你们的看法,谢谢。
[b]问题补充:[/b]
写片段一的同事,是这样理解的,java代码是顺序执行的,一旦抛出异常将终止程序,所以他认为,及时写在3个块中,也还是一样的,在前面资源释放是出现了异常中断程序执行,后面的资源一样不会释放。
我不知道怎么去说服他,各位能不能给我写意见。
[b]问题补充:[/b]
谢谢yourgame,我知道怎么说服他了,哈哈。

  • 写回答

5条回答 默认 最新

  • zhoujuan520 2009-06-17 12:50
    关注

    先扁了再说.死硬派

    try块中到代码发生异常后,会先去catch,然后去finally,然后继续走下去.除非不是异常,是Error那就是致命到拉.trycatch trycatch 就是可以捕获到错误嘛,如果不继续走了.补他干鸟.之所以能够处理,也就是还可以继续走下去撒

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?