概要
本文主要用VB.NET语句写一个具有非结构化异常处理的简单计算器,主要介绍VB.NET中的非结构化异常处理的知识。
计算器界面
计算器简单描述
单击数字和运算符输入公式。其中单击运算符按钮时,文本框Text属性中连接一个空格,然后连接“运算符”按钮的Text属性,在连接一个按钮。这样子“计算”按钮的click事件中,通过查找空格的位置,通过字符串的取子字串方法就可以获得两个运算数和运算符然后通过select case end select语句可以判断运算符是什么运算符并对两个运算数进行相应运算就可以得到结果,将结果显示出来即可。
为了捕获异常并处理异常,可以使用on error语句指定错误处理程序。在错误处理程序块中通过err对象的number属性中的错误号来判断错误的类型(算术运算溢出,错误号为6.过程参数错误,错误号5),然后决定相应的处理。
计算器代码
数字和运算符按钮的代码
数字“1”的代码;其他的数字和数字1的代码相同
运算符“+”的代码,其他运算符相同
确定按钮的代码
理论介绍On Error语句有一下四种形式:
On Error GOTO Line
On Error Resume Next
On Error GOTO 0
On Error GOTO -1
具体解释:
On Error GOTO Line
该语句假定错误处理代码在Line参数指定的行处开始。该语句的作用是如果发生运行时错误,则将流程跳转到该Line参数中指定的行号和行标签,并激活错误处理程序。指定行必须与On Error GOTO Line语句位于统一过程中,否则VB.NET将生成编译器错误。
下面示例:
这里面包含一个名为ErrorHandler的错误处理程序。如果ErrTest过程中的任何代码生成错误,VB.NET将立即执行ErrorHandler标签后面的代码。在错误处理程序块的结尾处,Resume语句将把程序流程转移到最先发生错误的代码行,重新执行发生错误的代码行以及以后的代码。
这里需要注意,必须将ExitSub语句放在错误处理块的前面,否则VB.NET在到达子例程的结尾时将运行错误处理代码,从而导致不可意料的结果。
On Error Resume Next
该语句的作用是如果在过程中出现运行错误,将流程跳到发生错误的语句的下一条语句,再继续进行。使用该语句可以将错误处理过程放置于错误可能发生的地方,从而不需要在发生错误时将程序流程跳转到其他位置。
如果在过程中调用了其他过程,则On Error Resume Next语句将在执行被调用的过程时被禁止。因此,应该将On Error Resume Next语句放置于每个被调用的过程中。
On Error GOTO 0
该语句用于禁止当前过程中任何可用的错误处理代码块。如果不包含On Error GOTO 0语句,则当退出过程时,其中的所有异常处理代码都将被自动禁止。
On Error GOTO 0语句并不表示第0行是错误处理代码的起始,即使过程中包含第0行。
On Error GOTO -1
该语句用来禁止当前过程中任何可用的异常。如果不包含On Error GOTO -1语句。则当退出过程时,异常将被自动禁止。与OnError GOTO 0语句类似,该语句也并不表示第-1行是错误处理代码的起始,即使过程中包含第-1行。
下面通过一个实际的例子来说明On Error语句的使用。
例子的作用是把异常处理命名为DivideByZero并处理除数为0的错误。如果发生不同的错误,VB.NET引发运行时错误并停止应用程序。
归纳总结:
异常处理是程序员在编写过程中必须要考虑的一件事情,好的异常处理能使程序具有较强的容错能力和纠错能力。本文通过计算器运算过程中容易出现的一些异常的解决办法,讲解了非结构化化异常处理的一般方法:在容易发生异常的程序段前使用On Error语句指定错误处理程序块,在错误处理程序块中对出现的异常进行处理。在错误处理程序块中通过需要测试Err对象的Number属性以获取错误的类型,从而实施相应的处理。