VB.Net 中的异常处理(Try Catch)

⚡ 智能摘要

VB.Net 中的异常处理使用 Try、Catch、Finally 和 Throw 关键字来管理运行时错误(例如除以零),以便程序能够优雅地响应问题,而不是在执行期间崩溃。

  • 🔍 例外: 执行过程中出现的问题,例如将一个数除以零。
  • 🛡️ 尝试和捕捉: try 语句用于包装有风险的代码;catch 语句用于处理它引发的异常。
  • 最后: 无论是否发生异常,Finally 代码块都会运行。
  • 🚦 扔: throw 会引发一个继承自 System.Exception 类的异常对象。
  • 🧩 自定义例外: 继承 ApplicationException 来定义你自己的异常类型。
  • 🤖 人工智能帮助: GitHub Copilot 和 IntelliCode 输入时自动生成 Try Catch 代码块。

VB.Net 中的异常处理

VB.Net 中的异常是什么?

An 特殊课程 在 VB.Net 中,错误是指程序执行过程中出现的问题。它是由意外情况引起的。一个很好的例子是,当您执行除法运算时,如果除以零 (0),就会引发异常。

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

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

关键字 Detail
尝试 Try 块的作用是识别将激活特定异常的代码块。它后面应该跟一个或多个 catch 块。
摔角 异常的捕获在此块中完成。它是一个处理异常的异常处理器。
终于 无论是否发生异常,都使用 Finally 块运行一组语句。
问题发生后,抛出异常。这就是 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) 单击工具栏上的“开始”按钮执行代码。您应该得到以下输出:

VB.Net Try Catch Finally 控制台输出显示了捕获到的 DivideByZeroException 异常。

以下是代码截图:

Visual Studio 中显示的 VB.Net Try Catch Finally 示例代码

的解释 Code:

  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. 主要子程序的开始。
  13. 调用/调用 divisionFunction 子过程。两个整数参数的值在此处传递。n1=4 和 n2=0。这意味着除法运算将是 4\0,即 n1\n2。
  14. 暂停控制台窗口等待用户采取行动将其关闭。
  15. 主要子程序结束。
  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) 单击顶部栏中的“开始”按钮来执行代码。您应该得到以下输出:

VB.Net 用户定义的 HeightIsZeroException 消息打印在控制台上

以下是代码截图:

Visual Studio 中的 VB.Net 用户自定义异常类示例代码

的解释 Code:

  1. 创建一个名为 Module1 的模块。
  2. 创建一个名为HeightIsZeroException的异常类。该类继承了所有ApplicationException类。
  3. 创建一个名为 New 的子过程。它将采用一个名为 text 的字符串参数。
  4. 调用基类构造函数并将上述参数传递给它。
  5. 新子程序结束。
  6. HeightIsZeroException 类的结束。
  7. 创建一个名为 Height 的类。其公共访问修饰符为 Public,表示它将可供公众访问。
  8. 创建一个名为 Height 的整型变量并将其值初始化为 0。
  9. 创建一个名为 showHeight() 的子过程。
  10. 检查变量 Height 的值是否为 0。我们使用了 If…Then 条件。
  11. 如果上述条件为真,则抛出 HeightIsZeroException。抛出此异常时将显示消息 Zero Height Found。
  12. 当 If 条件不成立时执行 Else 部分。
  13. 当高度不为 0 时,在控制台上打印显示高度的消息。
  14. If 条件结束。
  15. showHeight() 子过程结束。
  16. 课程结束高度。
  17. 主要子程序的开始。
  18. 创建一个名为 Height 的对象作为 Height 类的实例。
  19. 异常处理块的开始。
  20. 调用 Height 类中定义的 showHeight() 子过程。我们使用了该类的对象来访问此方法。此行代码可能会引发异常。因此,我们用异常处理代码将其包裹起来。
  21. 如果发生 HeightIsZeroException 异常,则将其作为对象 ex 进行捕获。
  22. 当捕获到 HeightIsZeroException 时在控制台上打印的消息。
  23. 异常处理块的结束。
  24. 暂停控制台窗口等待用户采取行动将其关闭。
  25. 主要子程序结束。
  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) 单击顶部栏中的“开始”按钮来执行代码。您应该得到以下内容:

VB.Net Throw 语句控制台输出显示自定义异常消息

以下是代码截图:

VB.Net 抛出异常示例代码(使用 Try Catch Finally 语句)。

的解释 Code:

  1. 创建一个名为 Module1 的模块。
  2. 主要子程序的开始。
  3. 错误处理代码的开始。
  4. 抛出异常对象。此代码可能会生成异常,因此我们用 Try/Catch 块将其包围。
  5. 如果该行引发异常,则将异常作为对象 ex 捕获。
  6. 一旦发生异常,则在控制台上打印异常消息。
  7. 无论是否捕获到异常,Finally 块都会运行。
  8. 执行 Finally 块时在控制台上打印的消息。
  9. 异常处理代码结束。
  10. 暂停控制台一段时间,等待用户采取行动将其关闭。
  11. 主要子程序结束。
  12. 模块结束。

常见问题

是的。只要包含 Finally 代码块,即使没有 Catch 语句,Try 语句也是有效的。这种 Try Finally 结构会运行清理代码,但不会处理异常本身。

是的。列出几个 Catch 代码块来处理不同的异常类型。按照从最具体到最不具体的顺序排列它们,因为 VB.Net 会按顺序检查它们并使用第一个匹配项。

几乎总是如此。无论是否捕获到异常,甚至在执行 Return 语句之后,Finally 都会执行。只有在遇到 End 语句或 StackOverflowException 异常时才会跳过。

抛出异常会重新引发当前异常,并保留其原始堆栈。 trace. 抛出 ex 会重置堆栈。 trac将错误信息添加到当前行,隐藏错误实际发生的位置。建议使用普通的 Throw 语句。

语法错误会在程序运行前被编译器捕获。异常则在运行时(程序执行期间)发生,可以使用 try-catch 代码块进行处理。

常见的异常包括 DivideByZeroException、NullReferenceException、IndexOutOfRangeException、FormatException 和 OverflowException。它们都继承自 System.Exception,并且可以单独捕获。

是的。 GitHub 副驾驶 它会将纯英文注释转换为完整的 Try Catch Finally 代码块,并建议正确的异常类型。请务必检查生成的处理程序。

是的。Visual Studio 智商Code 提供上下文感知的整行补全功能,支持 Catch 子句和异常类型,并从数千个开源项目中学习。

总结一下这篇文章: