为什么要使用异常处理机制?
当没有异常处理时,系统遇到错误会直接报错,然后整个系统会崩,无法执行,而异常处理功能提供了处理程序运行时出现的任何意外或异常情况的方法,让程序即使有问题也可以正常执行下去,然后把异常抛出,对异常准确定位。
看下面一段代码的错误处理机制:
try
{
if (listCard == null || listCard.Count == 0)
{
MessageBox.Show("此卡号不存在", "提示");
}
}
catch(Exception ex)
{
;
}
通过上面代码可以发现异常处理时的问题:
1.catch捕获异常之后,没有执行任何操作,捕获到了异常却没有进行任何处理,
解决:.既然捕获了异常,就要对它进行适当的处理。不要捕获异常之后又把它丢弃,不予理睬。可以向上一层抛出异常,也可以转化为另一种形式的异常抛出。
2.catch(Exception) ,如下图:exception代表语句捕获所有的异常,这是我们不提倡的做法,在一个很大的系统中,该捕捉什么样的异常就捕捉什么样的异常,并且要对不同的异常执行不同的处理操作。要理解其原因,我们必须回顾一下catch语句的用途。catch语句表示我们预期会出现某种异常,而且希望能够处理该异常,如果用excption就证明要捕捉处理所有的异常。
所以在catch语句中尽可能指定具体的异常类型,必要时使用多个catch。不要试图处理所有可能出现的异常。
3.尽量减小try块的体积。分离各个可能出现异常的段落并分别捕获其异常
有时候我们恨不得把所有的代码都写到一个try里面,然后在catch语句中声明Exception,懒得分析到底哪几行代码会出现异常,以及出现什么样的异常,就像回家时把所有的东西都塞入一个行李箱,虽然东西是带上了,但要找出来可不容易,因为很多地方都可能出现excption异常。这样就很大地降低了系统的性能。
所以应该怎么做呢?应该分析不同的代码段会出项什么类型的异常,然后在各个部分执行try…catch操作。
4.保证所有资源都被正确释放。充分运用finally关键词。
try… catch会改变程序的执行顺序,当用到对数据库的链接或者用到某个文件时,一定要在finally里面释放掉这些资源,否则后面再使用的时候就会出错,
5.在异常处理模块中提供适量的错误原因信息,组织错误信息使其易于理解和阅读。
总结:
异常处理我们也应该注意一些问题,哪里可以用异常处理,哪里不可以使用,以及使用的时候应该注意的异常处理机制让我们对错误清晰定位。