VB.NET异常处理及抛出异常

来源:互联网 发布:雄猫软件培训骗局 编辑:程序博客网 时间:2024/04/28 16:22

        异常处理是.NET平台重要的安全机制,它将错误代码的接受和处理的进行了完美的分离,理清了编程者的思绪,也帮助代码增强了可读性,方便了维护者的阅读和理解,而且还提供了处理程序运行时出现的任何意外或异常情况的方法。在.NET平台中异常处理使用 try、catch 和 finally 关键字来尝试可能未成功的操作,处理失败,以及在事后清理资源。异常处理(又称为错误处理)功能。与传统VB6.0中的On Error语句相比.NET平台的异常处理机制更加灵活,而且使用更加方便。

一、异常处理的三个语句块

       .NET平台中异常处理主要是由try/catch/finally三个语句块构成,try块负责错误代码的捕获,catch进行错误的处理,finally负责错误处理后的后续工作如:释放对象、清理资源等的工作。

Try  '程序代码Catch  '处理异常的代码Finally  '清理工作End Try 

       在上面的语句块中Try和Finally语句块是必须运行的,但是Catch语句块不一定运行,如果Try块内的代码没有错误,没有抛出异常的话,Catch语句块中的代码是不运行的,而是跳过Catch块直接运行Finally块中的清理工作。反之如果遇到了异常Catch语句块中的处理工作就要进行。

       为什么要在Finally块中进行清理工作?简单的说一个程序的异常会导致程序不能正常完成结束工作,而且在错误出现的地方跳出程序,直接执行Catch语句块中的代码,使得在程序运行时构建的对象资源不能释放,浪费了内存资源,同时也可能导致栈中数据存储的杂乱,所以无论有没有出现异常Finally块中的代码是一定会运行的。

异常处理的代码实例:

Private Sub FirstTryCatchButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FirstTryCatchButton.Click        Dim sngAvg As Single        sngAvg = GetAverage(0, 100)End SubPrivate Function GetAverage(ByVal iItems As Integer, ByVal iTotal As Integer) As Single        ' Code that might throw an exception is wrapped in a Try block        Try            Dim sngAverage As Single            ' This will cause an exception to be thrown if iItems = 0            sngAverage = CSng(iTotal \ iItems)            ' This only executes if the line above generated no error            MessageBox.Show("Calculation successful")            Return sngAverage        Catch excGeneric As Exception            ' If the calculation failed, you get here            MessageBox.Show("Calculation unsuccessful - exception caught")            Return 0        End TryEnd Function

二、抛出异常

       我们知道在程序中出现异常会导致提前跳出程序,同样抛出异常也是跳出程序代码,直接运行Catch块中的内容。抛出异常不仅可以应用在程序代码出现错误时,我们还可以使用抛出异常的机制来捕获一个过程或一个函数中出现异常值的情况,可以把这种方法看做是一个函数返回一个特殊值,通过上层函数来捕获程序中遇到异常的情况。VB.NET使用Throw关键字来在程序中抛出异常,让调用这个函数的上级调用函数进行处理。

Private Sub ThrowNewExceptionButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ThrowNewExceptionButton.Click        Try            Dim sngAvg As Single            sngAvg = GetAverage4(0, 100)        Catch exc As Exception            MessageBox.Show(exc.Message)        Finally            MessageBox.Show("Finally block in click event")        End TryEnd SubPrivate Function GetAverage4(ByVal iItems As Integer, ByVal iTotal As Integer) As Single        If iItems = 0 Then            Dim excOurOwnException As New ArgumentException("Number of items cannot be zero")            Throw excOurOwnException        End IfEnd Function




原创粉丝点击