java语法中为什么要保留try{}finally{}而没有catch{}的用法?这个没有抛出异常处理的语法好像没有意义吧?怎么还要保留这种用法呢?

刘学炜 发布于 2012/02/19 20:04
阅读 3K+
收藏 0
加载中
2
canghailan
canghailan

不就相当于

try {
} catch(Exception e) {
    throw e;
} finally {
}

比如你用流读取文件,但是不想在这儿处理IO异常,但是出现异常又必须关闭流,就可以用到try...finally了

刘学炜
刘学炜
有道理
1
浪客Dandy
浪客Dandy

这是有意义的,你可以在方法里声明throw某类exception,而在你的代码里做必要的收尾工作。

而异常的处理则交由调用者去处理

1
canghailan
canghailan

JDK文档中就有这样的用法:

http://static.oschina.net/uploads/doc/javase-6-doc-api-zh_CN/java/util/concurrent/locks/ReentrantLock.html

 class X {
   private final ReentrantLock lock = new ReentrantLock();
   // ...

   public void m() { 
     lock.lock();  // block until condition holds
     try {
       // ... method body
     } finally {
       lock.unlock()
     }
   }
 }

你不想或者不能在这里处理异常,但是不执行finally中的语句的话,可能就永远都得不到这个锁了。

 

canghailan
canghailan
@lxw出山小草 : 呵呵,原来用到锁查看文档时候影响比较深
刘学炜
刘学炜
恩恩,懂了。。。谢谢!!哇。。。你真牛,那么快就在api文档中找到例子谢谢
0
hulubo
hulubo

自己不想处理,就不catch了,但是又有资源什么的东西需要抛出异常前处理一下,那就用finally了,finally又不能单独用,就加个try了。所以就这样了。

刘学炜
刘学炜
不处理似乎感觉不太好吧
0
Undeadway
Undeadway
try {
	// Do something
} catch (Exception e) {
	// Do something
} finally {
	// Do something
}

难道我学的不是Java?

刘学炜
刘学炜
???我没这么说。。。
返回顶部
顶部