2 lrj1596 lrj1596 于 2016.03.23 21:01 提问

Java异常处理中居然有个try-finally????

一般都是try-catch,或者try-catch-finally,突然发现还有try 后面直接跟finally?????,这种try-finally有什么适用场景呢????

8个回答

sinat_34353359
sinat_34353359   2016.03.23 23:10
已采纳

跟做事一样,有些Exception撒手不理没关系,但是要守住finally的底线。

lrj1596
lrj1596 精辟!
一年多之前 回复
u010319440
u010319440   2016.03.23 21:03

finally表示无论上面是啥,都执行的逻辑,除非上面返回了,使用的场景比如创建了文件流,无论上面的逻辑如何,产生了什么异常,都要关闭文件流,以免内存泄漏

lrj1596
lrj1596 我的意思是什么场景适合不用catch
一年多之前 回复
bdmh
bdmh   Ds   Rxr 2016.03.23 21:03

用于不管怎样都要做某些事情,比如释放资源,即使出错了,也会进入final

lrj1596
lrj1596 我的意思是什么场景适合不用catch
一年多之前 回复
ale2012
ale2012   2016.03.23 22:11

可以直接使用try{...}finally{...},finally里一般放在任何情况下都要执行的处理,比如数据库资源和文件流资源的最后释放,释放不必要的内存占用

lrj1596
lrj1596 我的意思是什么场景适合不用catch
一年多之前 回复
Crabime
Crabime   2016.03.23 22:23

不是说有try就一定有catch,在JDBC中就有这种写法:
Class.forName(driver);
try(
Connection conn = DriverManager.getConnection();
Statement stmt = conn.createStatement();)
{
return stmt.executeQuery(sql);
}finally{
... //这里用来完成一些程序中没有完成的事情的处理
}
这里的写法我相信你应该能够理解,因为这里的try作用就是当程序出现异常的时候自动关闭数据库的连接,所以有try(){}就不需要显示关闭连接

David_Is_Me
David_Is_Me   2016.03.23 22:26

finally是代码必须执行的部分,适用场景很多:connection的关闭,流的close等等,用于释放内存。
希望能够帮到你。

lrj1596
lrj1596 我的意思是什么场景适合不用catch
一年多之前 回复
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.23 22:26

可以啊,可以省略catch的啊。但是try语句是必须的。

u010512264
u010512264 回复lrj1596: 大概是不需要由你捕获异常的时候,只是一种语法。不要奇怪,语法也是人定的。
一年多之前 回复
u010512264
u010512264 回复lrj1596: 大概是不需要由你捕获异常的时候,只是一种语法。不要奇怪,语法也是人定的。
一年多之前 回复
lrj1596
lrj1596 我的意思是什么场景适合不用catch
一年多之前 回复
shuijiaxiaowei
shuijiaxiaowei   2016.03.23 22:29

finally中放置一定要执行的语句,通常用于流的关闭,资源的释放。我觉得写入文件的时候就可以用到此方法,不管文本是否存在,其实都会生成新的(或覆盖原有的)文本,但是最终流都是要关闭的。

lrj1596
lrj1596 我的意思是什么场景适合不用catch
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!