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) 单击工具栏上的“开始”按钮执行代码。您应该会看到以下输出:
这是代码的屏幕截图:
代码解释
- 创建一个名为 Module1 的模块。
- 创建了一个名为 divisionFunction 的子过程,该过程接受两个整数参数 n1 和 n2。ByVal 是一个 VB.Net 关键字,表示参数的值将按值传递。
- 创建了一个名为 answer 的整数变量。
- Try/Catch 块的开始。我们需要将可能引发异常的代码块用此块括起来。
- 执行变量 n1 和 n2 之间的除法运算。除法运算的结果赋给变量 answer。此代码可能会引发异常,例如,当我们将一个数除以零时,因此我们将其用 Try/Catch 块括起来。
- 捕获名为 DivideByZeroException 的异常,并将生成的异常消息赋给 ex。
- 在控制台打印一些文本,通知用户引发的异常的类型/名称。
- Finally 块。无论是否捕获到异常,此块都会执行。
- 在控制台打印一些文本,显示除法运算的结果。
- Try 块结束,即错误处理代码结束。
- divisionFunction 子过程结束。
- main 子过程的开始。
- 调用 divisionFunction 子过程。此处传递了两个整数参数的值。n1=4,n2=0。这意味着除法运算将是 4\0,即 n1\n2。
- 暂停控制台窗口,等待用户执行操作关闭它。
- main 子过程结束。
- 模块结束。
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) 单击顶部栏的“开始”按钮执行代码。您应该会看到以下输出:
这是代码的屏幕截图:
代码解释
- 创建一个名为 Module1 的模块。
- 创建了一个名为 HeightIsZeroException 的异常类。该类继承了 ApplicationException 类。
- 创建了一个名为 New 的子过程。它将接受一个名为 text 的字符串参数。
- 调用基类构造函数并将上述参数传递给它。
- New 子过程结束。
- HeightIsZeroException 类结束。
- 创建了一个名为 Height 的类。其公共访问修饰符为 Public,这意味着它是公开可访问的。
- 创建了一个名为 Height 的整数变量,并将其值初始化为 0。
- 创建了一个名为 showHeight() 的子过程。
- 检查变量 Height 的值是否为 0。我们使用了 If…Then 条件。
- 如果上述条件为真,则抛出 HeightIsZeroException。当抛出此异常时,将显示消息“零高度发现”。
- Else 部分将在 If 条件不为真时执行。
- 在控制台显示高度(当不为 0 时)的消息。
- If 条件结束。
- showHeight() 子过程结束。
- Height 类结束。
- main 子过程的开始。
- 创建了一个名为 Height 的对象,它是 Height 类的实例。
- 异常处理块的开始。
- 调用 Height 类中定义的 showHeight() 子过程。我们使用该类的对象来访问此方法。此行可能导致异常。因此,我们已将其用异常处理代码括起来。
- 在发生异常的情况下,将 HeightIsZeroException 异常捕获为对象 ex。
- 当捕获到 HeightIsZeroException 时,在控制台打印的消息。
- 异常处理块结束。
- 暂停控制台窗口,等待用户执行操作关闭它。
- main 子过程结束。
- 模块结束。
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) 单击顶部栏的“开始”按钮执行代码。您应该会看到以下内容:
这是代码的屏幕截图:
代码解释
- 创建一个名为 Module1 的模块。
- main 子过程的开始。
- 错误处理代码的开始。
- 抛出异常对象。此代码可能会生成异常,因此我们已将其用 Try/Catch 块括起来。
- 如果该行抛出异常,则捕获异常(作为对象 ex)。
- 如果发生异常,则在控制台打印异常消息。
- Finally 块,无论是否捕获到异常都将执行。
- 当 Finally 块执行时,在控制台打印的消息。
- 异常处理代码结束。
- 暂停控制台一会儿,等待用户执行操作关闭它。
- main 子过程结束。
- 模块结束。
摘要
- 异常是指程序执行期间出现的问题,该问题由意外情况引起。
- 如果您怀疑某些代码会生成异常,请将其用 Try/Catch 块括起来。
- Finally 块位于 Try/Catch 块之后,无论是否捕获到异常都会执行。
- VB.Net 允许我们创建自定义异常。