VB.Net 中的异常处理:Try & Catch 处理示例

VB.Net 中的异常是什么?

VB.Net 中的异常是指程序执行期间出现的问题。它是由意外情况引起的。一个很好的例子是,当您执行除法运算时,然后您除以零(0)。此时将引发异常。

VB.Net 中的异常处理是什么?

通过 VB.Net 中的异常,您可以将程序的控制权从一个部分转移到另一个部分。在 VB.Net 中,异常使用以下 4 个关键字进行处理:

关键字 详情
Try Try 块的作用是识别将激活特定异常的代码块。它之后应该跟一个或多个 catch 块。
Catch 在此块中捕获异常。它是一个异常处理程序,其中处理了异常。
Finally 无论是否发生异常,都可以使用 Finally 块来运行一组语句。
Throw 异常在问题发生后被抛出。这是 Throw 关键字的作用。

VB.Net 中 Try Catch 的语法

VB.Net 中的 Try Catch 语句使用以下语法定义:

Try
   [ try_Statement(s) ]
   [ Exit Try ]
[ Catch [ exception_name [ As type ] ] [ When expression ]
   [ catch_Statement(s) ]
   [ Exit Try ] ]
[ Catch ... ]
[ Finally
   [ finally_Statement(s) ] ]
End Try

Try/Catch 块应围绕可能引发异常的代码。这部分代码称为受保护代码。当您需要捕获不同类型的异常时,可以使用多个 catch 语句。

VB.Net 中的异常处理示例(使用 Try Catch 和 Finally)

通过 Try/Catch 语句,您可以将常规程序代码与错误处理系统分开。下面我们演示如何使用 Try、Catch 和 Finally 关键字来处理异常。

步骤 1) 创建一个新的控制台应用程序。

步骤 2) 使用此代码

Module Module1
    Sub divisionFunction(ByVal n1 As Integer, ByVal n2 As Integer)
        Dim answer As Integer
        Try
            answer = n1 \ n2
        Catch ex As DivideByZeroException
            Console.WriteLine("Exception: {0}", ex)
        Finally
            Console.WriteLine("Answer is: {0}", answer)
        End Try
    End Sub
    Sub Main()
        divisionFunction(4, 0)
        Console.ReadKey()
    End Sub

End Module

步骤 3) 单击工具栏上的“开始”按钮执行代码。您应该会看到以下输出:

Exception Handling

这是代码的屏幕截图:

Exception Handling

代码解释

  1. 创建一个名为 Module1 的模块。
  2. 创建了一个名为 divisionFunction 的子过程,该过程接受两个整数参数 n1 和 n2。ByVal 是一个 VB.Net 关键字,表示参数的值将按值传递。
  3. 创建了一个名为 answer 的整数变量。
  4. Try/Catch 块的开始。我们需要将可能引发异常的代码块用此块括起来。
  5. 执行变量 n1 和 n2 之间的除法运算。除法运算的结果赋给变量 answer。此代码可能会引发异常,例如,当我们将一个数除以零时,因此我们将其用 Try/Catch 块括起来。
  6. 捕获名为 DivideByZeroException 的异常,并将生成的异常消息赋给 ex。
  7. 在控制台打印一些文本,通知用户引发的异常的类型/名称。
  8. Finally 块。无论是否捕获到异常,此块都会执行。
  9. 在控制台打印一些文本,显示除法运算的结果。
  10. Try 块结束,即错误处理代码结束。
  11. divisionFunction 子过程结束。
  12. main 子过程的开始。
  13. 调用 divisionFunction 子过程。此处传递了两个整数参数的值。n1=4,n2=0。这意味着除法运算将是 4\0,即 n1\n2。
  14. 暂停控制台窗口,等待用户执行操作关闭它。
  15. main 子过程结束。
  16. 模块结束。

VB.Net 中的用户定义异常

VB.Net 允许您定义自己的异常。您可以从 ApplicationException 类获取用户定义的异常类。让我们通过一个例子来演示这一点。

VB.Net 用户定义异常示例

这是 VB.Net 用户定义异常的一个示例

步骤 1) 创建一个新的控制台应用程序。

步骤 2) 使用以下代码

Module Module1

    Public Class HeightIsZeroException : Inherits ApplicationException
        Public Sub New(ByVal text As String)
            MyBase.New(text)
        End Sub
    End Class
    Public Class Height
        Dim height As Integer = 0
        Sub showHeight()
            If (height = 0) Then
                Throw (New HeightIsZeroException("Zero Height found"))
            Else
                Console.WriteLine("Height is: {0}", height)
            End If
        End Sub
    End Class
    Sub Main()
        Dim hght As Height = New Height()
        Try
            hght.showHeight()
        Catch ex As HeightIsZeroException
            Console.WriteLine("HeightIsZeroException: {0}", ex.Message)
        End Try
        Console.ReadKey()
    End Sub

End Module

步骤 3) 单击顶部栏的“开始”按钮执行代码。您应该会看到以下输出:

User Defined Exception

这是代码的屏幕截图:

User Defined Exception

代码解释

  1. 创建一个名为 Module1 的模块。
  2. 创建了一个名为 HeightIsZeroException 的异常类。该类继承了 ApplicationException 类。
  3. 创建了一个名为 New 的子过程。它将接受一个名为 text 的字符串参数。
  4. 调用基类构造函数并将上述参数传递给它。
  5. New 子过程结束。
  6. HeightIsZeroException 类结束。
  7. 创建了一个名为 Height 的类。其公共访问修饰符为 Public,这意味着它是公开可访问的。
  8. 创建了一个名为 Height 的整数变量,并将其值初始化为 0。
  9. 创建了一个名为 showHeight() 的子过程。
  10. 检查变量 Height 的值是否为 0。我们使用了 If…Then 条件。
  11. 如果上述条件为真,则抛出 HeightIsZeroException。当抛出此异常时,将显示消息“零高度发现”。
  12. Else 部分将在 If 条件不为真时执行。
  13. 在控制台显示高度(当不为 0 时)的消息。
  14. If 条件结束。
  15. showHeight() 子过程结束。
  16. Height 类结束。
  17. main 子过程的开始。
  18. 创建了一个名为 Height 的对象,它是 Height 类的实例。
  19. 异常处理块的开始。
  20. 调用 Height 类中定义的 showHeight() 子过程。我们使用该类的对象来访问此方法。此行可能导致异常。因此,我们已将其用异常处理代码括起来。
  21. 在发生异常的情况下,将 HeightIsZeroException 异常捕获为对象 ex。
  22. 当捕获到 HeightIsZeroException 时,在控制台打印的消息。
  23. 异常处理块结束。
  24. 暂停控制台窗口,等待用户执行操作关闭它。
  25. main 子过程结束。
  26. 模块结束。

VB.Net 中抛出异常

在异常处理中,您可以选择抛出一个对象。但是,该对象必须直接或间接派生自 System.Exception 类。例如:

VB.Net 中抛出异常的示例

下面是一个 VB.Net 中抛出异常的示例

步骤 1) 创建一个新的控制台应用程序。

步骤 2) 使用以下代码

Module Module1

    Sub Main()
        Try
            Throw New ApplicationException("Throwing a custom exception")
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        Finally
            Console.WriteLine("The Finally Block")
        End Try
        Console.ReadKey()
    End Sub


End Module

步骤 3) 单击顶部栏的“开始”按钮执行代码。您应该会看到以下内容:

Throw Exception

这是代码的屏幕截图:

Throw Exception

代码解释

  1. 创建一个名为 Module1 的模块。
  2. main 子过程的开始。
  3. 错误处理代码的开始。
  4. 抛出异常对象。此代码可能会生成异常,因此我们已将其用 Try/Catch 块括起来。
  5. 如果该行抛出异常,则捕获异常(作为对象 ex)。
  6. 如果发生异常,则在控制台打印异常消息。
  7. Finally 块,无论是否捕获到异常都将执行。
  8. 当 Finally 块执行时,在控制台打印的消息。
  9. 异常处理代码结束。
  10. 暂停控制台一会儿,等待用户执行操作关闭它。
  11. main 子过程结束。
  12. 模块结束。

摘要

  • 异常是指程序执行期间出现的问题,该问题由意外情况引起。
  • 如果您怀疑某些代码会生成异常,请将其用 Try/Catch 块括起来。
  • Finally 块位于 Try/Catch 块之后,无论是否捕获到异常都会执行。
  • VB.Net 允许我们创建自定义异常。