结构化异常

try,catch,finally

catch中的代码是对异常的恢复操作。比如有状态的恢复,回滚。

finally是做一些清理工作。

foreach,using,lock实际上就是转换成try finally这种结构代码,finally中就是对象的清理,foreach是对INumerator.dispose(),lock是对锁对象的释放,using也是调用了对象的dipose方法。

catch的处理三种方式

一种是重新对异常的上抛,抛出后先执行是到catch中间的finally代码。

一种是抛出新的异常。

这两种方式都可以添加一些异常信息的描述。

还有一种是就是不抛出,进入下面的finally


throw和thorw e的区别:throw e会重置异常的起点,影响的就是堆栈跟踪。

未处理异常:就是异常抛出后,没有被catch住,这样就会导致进程终止,异常信息可以在系统日志中查到,这种异常属于程序的bug,应该在产品交付之前都处理调。


我也看了一些系统异常的设计,异常分为用户异常,运行时异常和程序员异常。

用户的异常就是指那些用户的错误输入造成程序无法完成功能,这种异常应该全部捕获,并以一定格式的信息反馈给用户,告诉用户输入错误,正确的输入范围,并且应该强制用户重新输入。

运行时的异常是指那些由于使用了一些资源,比如文件,连接数据库等操作没有按照正常执行。

程序员的异常,我的理解是函数级别的异常,如果参数不正确导致函数无法按照功能执行,我觉得应该抛出给使用程序,因为如果不抛出上层程序根本不知道发生错误继续执行,会导致无法预期的后果。


对于除了用户引发的异常外都应该记录在日志文件中,以便程序员在调式过程中定位错误,日志文件的写入可以设计出来一个标志,提交给客户之后,这些异常就不用再写日志了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值