栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

try / catch / throw和try / catch(e)/ throw e之间的区别

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

try / catch / throw和try / catch(e)/ throw e之间的区别

建筑

try { ... }catch () { ... } try { ... }catch (Exception e) { ... }

两者相似,因为两者都将捕获块中抛出的 每个 异常

try
(并且,除非您只是使用它来记录异常,否则应 避免 )。现在看看这些:

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

第一个try-catch块和第二个try-catch块完全相同,它们只是重新抛出当前异常,并且该异常将保留其“源”和堆栈跟踪。

第三个try-catch块是不同的。当它引发异常时,它将更改源和堆栈跟踪,以便看起来已从此方法引发异常,从

throw e
包含try-
catch块的方法的那一行开始。

您应该使用哪一个?这实际上取决于每种情况。

假设您有一个

Person
带有
.Save()
将其持久化到数据库中的方法的类。假设您的应用程序在
Person.Save()
某处执行该方法。如果您的数据库拒绝保存Person,
.Save()
则将引发异常。您应该使用
throw
还是
throwe
在这种情况下?这要看情况。

我更喜欢做的是:

try {        person.Save();}catch(DBException e) {    throw new InvalidPersonException(       "The person has an invalid state and could not be saved!",       e);}

这应该将DBException作为正在抛出的较新异常的“内部异常”。因此,当您检查此InvalidPersonException时,堆栈跟踪将包含返回Save方法的信息(这可能足以解决问题),但是如果需要,您仍然可以访问原始异常。

最后一点,当您 期望
一个异常时,您应该确实捕获该特定的异常,而不是一般的异常

Exception
,即,如果您期望一个InvalidPersonException,则您应该首选:

try { ... }catch (InvalidPersonException e) { ... }

try { ... }catch (Exception e) { ... }

祝好运!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/576326.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号