fanxin

 

当你捕获不同的异常有可能要进行不同的处理




最新文章:  ...楼主... 
懒懒猪
12345689

225 0


来自:上海
注册:2001-07-12
发帖:10+74 


当你捕获不同的异常有可能要进行不同的处理,如果是Exception,则不能分别处理!




-------------------------------------------------------------------------------------------
我是穷人我怕谁!

发表于:2002-10-23 13:49:39
最新文章:  ...第1楼... 
零蛋
zerozhou

462 0


来自:上海
注册:2001-04-16
发帖:95+1904 

 功能:[编辑] [短信] [好友] [文集] [相册] [搜索] [举报] [道具] 管理[删除]  [IP]

回复人: Philip1314(勇敢的心) ( ) 信誉:100  2002-10-17 17:00:56  得分:0  



RuntimeException是不需要throw的



回复人: Patrick_DK(我向西 引北风 晒成一身古铜) ( ) 信誉:100  2002-10-17 17:10:05  得分:0  



所有的类的方法都用throws exception



我也是这么do的



只在调用处try catch



你看看Java API吧,基本都是如此



Top



回复人: wangluoxing(我需要钱) ( ) 信誉:100  2002-10-17 19:33:32  得分:0  





  

我也正在想这个问题/应该在什么情况下抛出







Top



回复人: chenyuan_tongji(codeguru) ( ) 信誉:100  2002-10-17 19:35:11  得分:0  





  

在可能会出现exception的地方,要使用try-catch或者throws或者两者都要。我的判断依据是:如果对可能出现的exception不 想被外部(方法的调用者)知道,就在方法内部try-catch掉这个exception;如果希望外部知道,则在catch到之后把exception 直接抛出或者抛出自定义的exception。



另外,有些地方即使不会有exception,但是从商业逻辑上是错误的、非预期的,也可以抛出user exception。例如,用户输入非法,bank account非法透支等等。



--

please correct me if I am wrong with anything above







Top



回复人: winterld(winter) ( ) 信誉:100  2002-10-17 20:04:24  得分:0  





  

throws的时候可以抛出定制的Exception,也就是说可以将商业逻辑上的错误封装到自定义的异常中。







Top



回复人: hotenM(五月飓风) ( ) 信誉:100  2002-10-17 21:07:51  得分:0  





  

工具类里面throw

流程类里catch







Top



回复人: signboy(横) ( ) 信誉:100  2002-10-18 9:00:37  得分:0  





  

尽情关注







Top



回复人: jiayp004(spark) ( ) 信誉:100  2002-10-18 9:02:28  得分:0  





  

gz







Top



回复人: alphazhao(绿色咖啡) ( ) 信誉:100  2002-10-18 9:32:04  得分:0  





  

异常的捕捉一般用try catch或throws都没有什么大的问题

但有的时候要看你对异常的需要或者处理

比如有的异常需要处理,这就涉及到处理的范围,是内部处理,还是在外围处理,另外还有的就是自定义异常,很多时候程序流程需要自定义异常来区分流向,需要向外抛出的。

btw:异常的throws切记要注意finally模式对其的屏蔽,这时java系统的一个较为严重的bug,详细参考thinking in java书中关于finally的解释







Top



回复人: t() ( ) 信誉:100  2002-10-18 9:59:54  得分:0  





  

原则:能处理就处理,不能处理就抛出







Top



回复人: Patrick_DK(我向西 引北风 晒成一身古铜) ( ) 信誉:100  2002-10-18 10:27:57  得分:0  





  

chenyuan_tongji(codeguru) ( )



说的不错







Top



回复人: hello_wyq(半瓶墨水) ( ) 信誉:100  2002-10-18 12:15:58  得分:0  





  

上层不关心的异常就catch掉,自己处理。

上层关心的异常一般都throw







Top



回复人: lizl(红星闪闪) ( ) 信誉:100  2002-10-18 12:50:35  得分:0  





  

1、如果无法处理某个异常,那就不要捕获它。

2、如果捕获了一个异常,请不要胡乱处理它。

3、尽量在靠近异常被抛出的地方捕获异常。

4、在捕获异常的地方将它记录到日志中,除非您打算将它重新抛出。

5、按照您的异常处理必须多精细来构造您的方法。

6、需要用几种类型的异常就用几种,尤其是对于应用程序异常。









Top



回复人: owenyang(和java 在一起) ( ) 信誉:100  2002-10-18 12:57:29  得分:0  





  

同意chenyuan_tongji(codeguru)的说法







Top



回复人: maxtiger(tiger) ( ) 信誉:100  2002-10-18 13:24:30  得分:0  





  



哈哈……, hello_wyq(半瓶墨水)  说得很到位。。。









Top



回复人: freeboy777(自由男孩) ( ) 信誉:100  2002-10-18 15:57:48  得分:0  





  

我对java异常的一点使用经验:

java异常可以分成两大类:Exception和RuntimeException(虽然RuntimeException是从Exception继承 的)。exception异常代表“无法避免的异常” 如io异常  往往这类异常是由于外部原因造成的,程序本身无法保证他们不发生,所以这类异常必须捕获。如果在函数内部无法处理这个异常必须再次抛出(在 函数后面用throws语句),如果什么都不做就出现编译错误。

runtimexception是指“可以避免的异常”,如 null引用异常,这类异常都是由程序内部原因造成的,是可以避免的。对于这类异常可以忽略他们,但一旦发生程序就会异常终止。这类异常对debug非常有帮助,当然,如果需要也可以catch







Top



回复人: miles_z(www.2yup.com/asp/) ( ) 信誉:100  2002-10-21 16:01:27  得分:0  





  

理论上讲,应该捕捉一切可以预知的异常。当然,如果不是最终的使用者(客户程序员),而是类库提供者,可以throws,因为你可以确知这些异常会最终被处理;否则,一定要谨慎的使用throws,因为可能最终exception不会被正确处理。



的确是有这样的特例的。比如,在jsp里,即使不处理异常也不抛出,因为jsp本身机制,也不会报编译错。这个时候,可能会使这个异常成为类似于RuntimeException的东西,让最终用户看到。这种做法是不负责任的。



RuntimeException只是一个概念,实际上,本来所有的Exception都一样,本质上RuntimeException不会另行处理。所以,是不是throws,还是要根据你的总体设计中bean所处的地位来进行判断。







Top



回复人: DanielYWoo(绿色毒汁) ( ) 信誉:100  2002-10-21 16:11:43  得分:0  





  

一句话总结:



除非你想把异常处理的责任交给调用者,一般不用throws, 。



解释:

比如你要读入一些文件,如果你想通知调用者,让调用者决定如何

处理这个异常,你就把这个异常throws给调用者;

如果你知道应该如何处理这个异常,或者你想把异常马上解决,

你可以就地catch她。



这完全取决于你想把异常自己立即处理还是想把处理责任返回给调用者。

取决于你的程序的结构和要求。



我的经验,大多是抛出后,被一级调用者处理,如果一级调用者再次抛出

此异常给二级调用者,很容易使问题复杂化;另外,还有一种情况就是

立即catch

posted on 2006-01-17 22:04 fanxin 阅读(186) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

留言簿

文章档案

Java

matrix

weiqin

中国JSP技术网站

搜索

最新评论