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

异常处理是.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 Sub

Private 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 Try

End 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 Try
End Sub

Private 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 If
End Function




你可能感兴趣的:(VB.NET异常处理及抛出异常)