异常机制

来源:互联网 发布:源码基地 编辑:程序博客网 时间:2024/04/30 19:27

异常处理就是处理程序中的错误。

一种思想:在所有支持异常处理的编程语言中(例如java),要认识到的一个思想:
在异常处理过程中,由问题检测代码可以抛出一个对象给问题处理代码,通过这个对象的类
型和内容,实际上完成了两个部分的通信,通信的内容是“出现了什么错误” 。当然,各种
语言对异常的具体实现有着或多或少的区别,但是这个通信的思想是不变的。

异常出现之前处理错误的方式
在C 语言的世界中,对错误的处理总是围绕着两种方法:一是使用整型的返回值标识错误;二是使用errno宏(可以简单的理解为一个全局整型变量)去记录错误。当然C++中仍然是可以用这两种方法的。
这两种方法最大的缺陷就是会出现不一致问题。例如有些函数返回1表示成功,返回0表示出错;而有些函数返回0表示成功,返回非0表示出错。
还有一个缺点就是函数的返回值只有一个,你通过函数的返回值表示错误代码,那么函数就不能返回其他的值。当然,你也可以通过指针或者C++的引用来返回另外的值,但是这样可能会令你的程序略微晦涩难懂。

异常为什么好
 函数的返回值可以忽略,但异常不可忽略。如果程序出现异常,但是没有被捕获,程序就会终止,这多少会促使程序员开发出来的程序更健壮一点。而如果使用C语言的error宏或者函数返回值,调用者都有可能忘记检查,从而没有对错误进行处理,结果造成程序莫名其面的终止或出现错误的结果。
 整型返回值没有任何语义信息。而异常却包含语义信息,有时你从类名就能够体现出来。
 整型返回值缺乏相关的上下文信息。异常作为一个类,可以拥有自己的成员,这些成员就可以传递足够的信息。
 异常处理可以在调用跳级。这是一个代码编写时的问题:假设在有多个函数的调用栈中出现了某个错误,使用整型返回码要求你在每一级函数中都要进行处理。而使用异常处理的栈展开机制,只需要在一处进行处理就可以了,不需要每级函数都处理。

异常机制和函数机制互不干涉,但是捕捉方式是通过严格类型匹配。捕捉相当于函数返回类型的匹配,而不是函数参数的匹配,所以捕捉不用考虑一个抛掷中的多种数据类型匹配问题。

0 0
原创粉丝点击