异常相关

常见的异常

1.与数组集合有关 

IndexOutOfRangeException类:索引超出范围引发的异常 
ArrayTypeMismatchException类:数组集合存储数据类型不正确引发的异常 
RankException类:处理维数错误引发的异常 
2.IO有关的异常  
与IO相关的异常都继承自IOException类,该类用于处理进行文件输入输出操作时所引发的异常,IOException类的5个直接派生类如下。 
DirectoryNotFoundException类:没有找到指定的目录而引发的异常。 
FileNotFoundException类:没有找到文件而引发的异常。 
EndOfStreamException类:处理已经到达流的末尾而还要继续读数据而引发的异常。 
FileLoadException类:无法加载文件而引发的异常。 
PathTooLongException类:文件名太长而引发的异常。 
3.成员访问有关的异常  
与成员访问相关的异常都继承自MemberAccessException这个类,它继承自SystemException。 
FileAccessException:访问字段成员失败所引发的异常 
MethodAccessException:访问方法成员失败引发异常 
MissingMemberException:成员不存在引发的异常 
4.参数相关的异常  
与参数有关的异常类ArgumentException都继承自SystemException,处理给方法成员传递参数时发生异常
ArgumentOutOfRangeException:当一个参数不在给定范围内引发的异常 
ArgumentNullException:参数为null(不允许null)的情况下引发的异常 
5..与算术相关  
ArithmeticException异常类用于处理与算术相关的异常,它的相关子类如下 
DivideByZeroException:整数十进制试图除以0引发的异常(被除数不能为0) 
NotFiniteNumberException:浮点数运算中出现无穷大或非负值引发的异常 
6.其他异常  
NullReferenceException:当一个对象没有实例化时并引用引发的异常 
InvalidOperationException:当对方法的调用对象当前状态无效时引发异常 
InvalidCastException:处理类型转换期间引发的异常 
OutOfMemoryException:处理内存不足引发的异常 

StackOverflowException:处理栈溢出引发的错误

异常捕获使用try...catch...finally... 如果非必需使用最好不要使用 可以确定可能出现的错误操作使用if判断处理



异常处理原则

要捕获具体的异常 
在捕获异常的时候,我们经常习惯性写catch(Exception ex) ,这个并非具体的异常,最好是能具体到ArgumentException、FormatException等异常类,不要抛出”new Exception()” 
catch中啥也不干,异常要向顶层抛出 
这种情况在自己写demo的时候可能比较常见,在编写catch(Exception ex)这块代码下啥也不干,不要这样做。切记出现的异常要想顶层抛出 
合理使用finally块 
finally关键字是不管抛出什么类型异常都会被执行,大多数的时候能在finally块下执行的代码,也能写在catch里面。那么finally关键字到底在什么情况下使用比较合适呢,比如清理资源,关闭流,回复状态等。 
抛出的异常要记录下来 
当然程序中出现的异常并不是所有都要记录下来,有些异常还是记录下来便于分析具体的问题。一些记录日志库 log4net ,EIF…… 
不要只记录Exception.Message的值,还需要记录Exception.ToString() 
刚刚前面的例子,我打印的e.Message ,仅仅只是输出“尝试除以0”,提示的错误信息不具体,并不推荐这样做。Tostring方法中包含了stacktrace、内部异常信息、Message…..通常这些信息比仅一个Message更重要 
不要将“抛出异常”作为函数执行结果的一种 
“抛出异常”应该向顶层抛出,但是不能作为方法执行结果的一种,方法的结果不能是异常类。 
每个线程要包含一个try/catch块 
创建子线程去执行任务时,主线程不会知道子线程的异常情况,所以每个线程都需要一个try、catch. 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值