在项目开发中,错误和异常是不可避免的。为了尽可能多的避免类似情况,VB.net中提供了一种异常处理机制,允许开发者捕捉程序运行时可能出现的异常。
我们在学习VB6.0的时候,学到ONError的错误语句。与传统VB6.0中的OnError语句相比.NET平台的异常处理机制更加灵活,而且使用更加方便。异常处理分离了接收和处理错误代码。这个功能理清了编程者的思绪,也帮助代码增强了可读性,方便维护者的阅读和理解。
一、异常处理Try...Catch...Finally
Try
'该语句能够引发一个异常的代码
Catch ex As Exception
'用来对捕获的错误进行处理
Finally
'存放异常处理后执行的代码(如关闭数据库连接等)
End Try
在上述语句中,Try语句块通常存放的是我们需要检测可能存在异常情况的代码,也就是说如果程序正确,则执行Try语句块,Catch语句块负责捕捉到错误的代码。所以当这段代码在执行过程中产生异常,则转到Catch块中对该异常进行相应处理。最后,无论是否引发异常,Finally块中的代码最后一定会被执行。 Finaly块用于清除try块中分配的任何资源以及运行任何即使在发生异常时也必须执行的代码。Catch和Finally语句可以共同使用于一个Try块中。
示例如下:
Private Sub butnTest_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim i As Integer = 4
Dim j As Integer = 0
TextBox1.Text = GetTry(i, j)
End Sub
Private Function GetTry(ByVal a As Integer, b As Integer) As Integer
Dim c As Integer
Try
c = a \ b
MsgBox("运算正确!") '若是b不为零,则执行返回C
Return c
Catch ex As Exception 'b为零,执行此代码
MsgBox("除数不能为0!")
End Try
End Function
二、自定义抛出类型
当程序出现异常状况时会导致系统提前跳出该程序,运用Catch捕捉异常,可使我们继续执行Catch的内容。try...catch 捕获的是系统自行检测出来的错误。如果我们需要自定义一些错误,例如检测到了卡号不存在等错误的时候,我们可以使用Throw 关键字来在程序中抛出异常。
Throw关键字通常用于方法体中,并且抛出一个异常对象,如果一个方法没有捕获可能引发的异常,调用该方法的其他方法应该捕获并处理异常。程序在执行到throw语句时立即终止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法的声明中指明要抛出的异常;如果要捕捉throw抛出的异常,则必须使用try-catch语句。例如:
Private Sub butnTest_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
Dim i As Integer = 4
Dim j As Integer = 0
TextBox1.Text = GetTry(i, j)
Catch ex As Exception
MsgBox("除数不能为0", vbOKOnly + vbInformation, "系统消息")
Finally
MsgBox("结束测试")
End Try
End Sub
Private Function GetTry(ByVal a As Integer, b As Integer) As Integer
If b = 0 Then
Dim excOurOwnException As New ArgumentException("除数不能为0") '抛出自定义异常
Throw excOurOwnException
End If
End Function
这次机房合作中,在B层和U层进行逻辑判断的时候,运用到了很多异常处理,VB.NET 结构化异常处理提供了很好的灵活性,保证我们的程序稳定可靠的运行,对于异常处理我们应该合理的利用。