A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 。。。。。。。 中级黑马   /  2013-11-5 09:55  /  1380 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 。。。。。。。 于 2013-11-6 13:56 编辑

try{

}
finally{

}
这种格式可以存在对吧,那么存在的意义是什么呢,这样定义没有catch语句,异常无法被处理,有什么意义呢?

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
这种存在格式是对的,有它自身的意义,比如你用来流读取文件时,
try{
      catch(IOException e){
}
}
回复 使用道具 举报
不好意思,那个没写完,摁错键了,是这样的
这种存在格式是对的,有它自身的意义,比如你用来流读取文件时,
try{
      catch(IOException e){
             throw e
     }
}
finally{
    //关闭资源
}
你不想在这处理异常,但是又必须关闭资源时,就可以用到try-finally语句了,还有在数据库的操作时,这样的语句也经常遇到。
我也是初学者,希望能帮到你

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
finally 的存在是保证关键资源被按时正确清理,常见的应用有jdbc的Connection, Statement, ResultSet等。
回复 使用道具 举报
java的try-finally是为了清除会占用系统资源的动作。
一个try-finally结构,只要try块开始执行了,finally块里面的代码保证执行一次并且只有一次。
比如在JDBC中,当我们用到Connection, Statement, ResultSet这些对象时,他们都用到了系统资源,
用try-catch-finally结构也是可以的,但这个过程你需要处理这个异常,又会占用系统资源,且这些异常是运行时异常
在编译期间看不到,但运行时可能会出现错误。索性直接抛出去让jvm来处理这个问题。
我们只需保证每建立一个需要清理的资源,就用一个try-finally来保证它可以被清理掉。

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
这种存在格式是对的,有它自身的意义。
try所限定的代码中,当抛弃一个例外时,其后的代码不会被执行。然而有些资源的清除必须执行,由于无论try所指定的程序块中抛弃或不抛弃例外,也无论catch语句的例外类型是否与所抛弃的例外的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。通常在finally语句中可以进行资源的清除工作。如关闭打开的文件等。
回复 使用道具 举报
try{

}
finally{

}  
1.要说说finally 是必须执行finally  就算try中有return 也要执行 finally
2.这样就可以在finally里面写一些必须执行的代码  比如iO中流是占用资源的 所以必须关闭 那么在哪关闭呢 可以在try中关闭但如果关闭之前有一个return;这样就关闭不了了
这样就会造成浪费资源  但如果放在finally中就没这种情况 因为finally是必须执行的

回复 使用道具 举报
其实吧,大家说的都很对,这个确实在做后台处理的时候,资源必须要关闭,但是出现的问题不能自个儿给处理了,要交给程序调用者去处理,所以,这个时候就用到这种格式了,而且很常见啊。
但是楼上都忘了一点的是,出现异常必须的处理吧,try{}只是检测可能出现异常的代码,而真正的处理是交给catch或是throws了吧!
这个地方。
如果你只写try{}finally{}程序会编译不过的,因为程序一旦出现异常,你必须要处理,所以其实try{}finally{}是和throws配合起来使用的,在你try{}finally{}的函数上把异常抛出去,交给调用者处理,
噢耶~
回复 使用道具 举报
可以的,异常的三种格式1 try{}catch{} finally{} 2 try{}catch{} 3try{} finally{}你说的就是第三种,意义就是:应用try-finally,我们可以在异常满天飞的程序里保证我们的关键资源被按时正确清理。一个最常见的应用就是jdbc的Connection, Statement, ResultSet等
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马