异常处理
异常处理, 是代替日渐衰落的error code方法的新法,提供error code 所未能具体的优势。异常处理分离了接收和处理错误代码。这个功能理清了编程者的思绪,也帮助代码增强了可读性,方便了维护者的阅读和理解。
异常处理(又称为错误处理)功能提供了处理程序运行时出现的任何意外或异常情况的方法。异常处理使用 try、catch 和 finally 关键字来尝试可能未成功的操作,处理失败,以及在事后清理资源。
特点
1.在应用程序遇到异常情况(如被零除情况或内存不足警告)时,就会产生异常。
2.发生异常时,控制流立即跳转到关联的异常处理程序(如果存在)。
3.如果给定异常没有异常处理程序,则程序将停止执行,并显示一条错误信息。
4.可能导致异常的操作通过 try 关键字来
执行。
5.异常处理程序是在异常发生时执行的代码块。在 C# 中,catch 关键字用于定义异常处理程序。
6.程序可以使用 throw 关键字显式地引发异常。
7.异常对象包含有关错误的详细信息,其中包括调用堆栈的状态以及有关错误的文本说明。
8.即使引发了异常,finally 块中的代码也会执行,从而使程序可以释放资源。
基本模型编辑
一种称为“终止模型”(它是Java与C++所支持的模型)。在这种模型中,将假设错误非常关键,将以致于程序无法返回到异常发生的地方继续执行。一旦异常被抛出,就表明错误已无法挽回,也不能回来继续执行。
另一种称为“恢复模型”。意思是异常处理程序的工作是修正错误,然后重新尝试调动出问题的方法,并认为第二次能成功。
对于恢复模型,通常希望异常被处理之后能继续执行程序。在这种情况下,抛出异常更像是对方法的调用--可以在Java里用这种方法进行配置,以得到类似恢复的行为。(也就是说,不是抛出异常,而是调用方法修正错误。)或者,把try块放在while循环里,这样就可以不断的进入try块,直到得到满意的结果。
虽然恢复模型开始显得很吸引人,并且人们使用的操作系统也支持恢复模型的异常处理,但程序员们最终还是转向了使用类似“终止模型”的代码。
因为:处理程序必须关注异常抛出的地点,这势必要包含依赖于抛出位置的非通用性代码。这增加了代码编写和维护的困难,对于异常可能会从许多地方抛出的大型程序来说,更是如此。
下面我写的一个简单的例子 VC++6.0下通过
#include <iostream>
using namespace std;
class Error
public:
virtual void show()=0;
class DenoError:public Error
public:
void show()
cout<<"分母不可以为0!"<<endl;
void main()
int a,b;
cin>>a>>b;
try
DenoError e;
if(b==0)
throw e;
int c=a/b;
cout<<c<<endl;
catch(DenoError & e)
e.show();