首页 新闻 会员 周边

一个关于异常的问题

0
悬赏园豆:5 [待解决问题]

请问大家在抛出异常的时候,throw和throw ex有什么区别?在什么情况下应该用哪种方式抛出,谢谢~!

yixin841210的主页 yixin841210 | 小虾三级 | 园豆:1138
提问于:2011-03-06 12:26
< >
分享
所有回答(3)
0

throw new xxxException();

抛出异常,根据具体需要,可以抛出特定的异常,如 IndexOutOfException,等


stevey | 园豆:335 (菜鸟二级) | 2011-03-06 17:37
0

抛出的异常没区别。一个是可以有或者没有ex变量。另一个必需有ex变量

慧☆星 | 园豆:5640 (大侠五级) | 2011-03-06 19:59
0

我本来不想回答的,结果一看楼上的回答我流汗了,这样误导了就又葬送一个程序员了……

首先我们要确定你的代码是这样的:

try {

//你的代码

}

catch (Exception ex) {

throw;

//throw ex;

}

来关心一下这里的throw和throw ex有什么区别:

当进入catch快时,这个ex变量肯定是一个Exception类的对象,Exception类有一个叫StackTrace的属性,记录了你的异常是从哪里抛出来,经过了哪些函数,最终到达了这边

如果你使用throw,那么向上抛出这个异常,里面依旧保存了StackTrace,当然这个StackTrace里会再加上一条,说明这个异常经过了你写的这个函数

如果你使用throw ex,那么向上抛出ex这个异常,但里面的StackTrace会清空,上层再catch到异常时,会发现StackTrace里只保留了你写的这个函数开始的路径,那么上层就会认为“这个异常是你的函数引起的,而非你函数调用的其他函数引起的”

 

一般来说,我们推荐用throw,但世事无绝对,要看具体的场景,至于具体怎么选择,再多积累点经验会更清楚

Gray Zhang | 园豆:17610 (专家六级) | 2011-03-07 12:05
学习了。
支持(0) 反对(0) clound | 园豆:481 (菜鸟二级) | 2011-03-10 19:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册