
- VB.Net 基礎教程
- VB.Net - 首頁
- VB.Net - 概述
- VB.Net - 環境設定
- VB.Net - 程式結構
- VB.Net - 基本語法
- VB.Net - 資料型別
- VB.Net - 變數
- VB.Net - 常量
- VB.Net - 修飾符
- VB.Net - 語句
- VB.Net - 指令
- VB.Net - 運算子
- VB.Net - 決策制定
- VB.Net - 迴圈
- VB.Net - 字串
- VB.Net - 日期和時間
- VB.Net - 陣列
- VB.Net - 集合
- VB.Net - 函式
- VB.Net - 子程式
- VB.Net - 類和物件
- VB.Net - 異常處理
- VB.Net - 檔案處理
- VB.Net - 基本控制元件
- VB.Net - 對話方塊
- VB.Net - 高階窗體
- VB.Net - 事件處理
- VB.Net 高階教程
- VB.Net - 正則表示式
- VB.Net - 資料庫訪問
- VB.Net - Excel 表格
- VB.Net - 傳送電子郵件
- VB.Net - XML 處理
- VB.Net - Web程式設計
- VB.Net 有用資源
- VB.Net - 快速指南
- VB.Net - 有用資源
- VB.Net - 討論
VB.Net - 異常處理
異常是在程式執行期間出現的錯誤。異常是對程式執行期間出現的異常情況的響應,例如嘗試除以零。
異常提供了一種將控制權從程式的一部分轉移到另一部分的方法。VB.Net 異常處理基於四個關鍵字——Try、Catch、Finally 和 Throw。
Try − Try 塊標識將為其啟用特定異常的程式碼塊。它後面跟著一個或多個 Catch 塊。
Catch − 程式在程式中要處理問題的地方使用異常處理程式捕獲異常。Catch 關鍵字表示捕獲異常。
Finally − Finally 塊用於執行給定的語句集,無論是否丟擲異常。例如,如果開啟檔案,則無論是否引發異常,都必須關閉檔案。
Throw − 當出現問題時,程式會丟擲異常。這是使用 Throw 關鍵字完成的。
語法
假設一個塊會引發異常,則方法使用 Try 和 Catch 關鍵字的組合來捕獲異常。Try/Catch 塊放置在可能生成異常的程式碼周圍。Try/Catch 塊內的程式碼稱為受保護程式碼,使用 Try/Catch 的語法如下所示:
Try [ tryStatements ] [ Exit Try ] [ Catch [ exception [ As type ] ] [ When expression ] [ catchStatements ] [ Exit Try ] ] [ Catch ... ] [ Finally [ finallyStatements ] ] End Try
如果您的 try 塊在不同情況下引發多個異常,則可以列出多個 catch 語句以捕獲不同型別的異常。
.Net Framework 中的異常類
在 .Net Framework 中,異常由類表示。.Net Framework 中的異常類主要直接或間接地派生自System.Exception 類。一些從 System.Exception 類派生的異常類是System.ApplicationException 和System.SystemException 類。
System.ApplicationException 類支援應用程式程式生成的異常。因此,程式設計師定義的異常應該從此類派生。
System.SystemException 類是所有預定義系統異常的基類。
下表提供了一些從 Sytem.SystemException 類派生的預定義異常類:
異常類 | 描述 |
---|---|
System.IO.IOException | 處理 I/O 錯誤。 |
System.IndexOutOfRangeException | 處理方法引用超出範圍的陣列索引時生成的錯誤。 |
System.ArrayTypeMismatchException | 處理型別與陣列型別不匹配時生成的錯誤。 |
System.NullReferenceException | 處理取消引用空物件時生成的錯誤。 |
System.DivideByZeroException | 處理將被除數除以零時生成的錯誤。 |
System.InvalidCastException | 處理型別轉換期間生成的錯誤。 |
System.OutOfMemoryException | 處理由於可用記憶體不足而生成的錯誤。 |
System.StackOverflowException | 處理堆疊溢位時生成的錯誤。 |
處理異常
VB.Net 以 try 和 catch 塊的形式提供了一種結構化的異常處理解決方案。使用這些塊,核心程式語句與錯誤處理語句分開。
這些錯誤處理塊使用Try、Catch 和Finally 關鍵字實現。以下是在除以零條件發生時丟擲異常的示例:
Module exceptionProg Sub division(ByVal num1 As Integer, ByVal num2 As Integer) Dim result As Integer Try result = num1 \ num2 Catch e As DivideByZeroException Console.WriteLine("Exception caught: {0}", e) Finally Console.WriteLine("Result: {0}", result) End Try End Sub Sub Main() division(25, 0) Console.ReadKey() End Sub End Module
編譯並執行上述程式碼時,會產生以下結果:
Exception caught: System.DivideByZeroException: Attempted to divide by zero. at ... Result: 0
建立使用者定義的異常
您還可以定義自己的異常。使用者定義的異常類派生自ApplicationException 類。以下示例演示了這一點:
Module exceptionProg Public Class TempIsZeroException : Inherits ApplicationException Public Sub New(ByVal message As String) MyBase.New(message) End Sub End Class Public Class Temperature Dim temperature As Integer = 0 Sub showTemp() If (temperature = 0) Then Throw (New TempIsZeroException("Zero Temperature found")) Else Console.WriteLine("Temperature: {0}", temperature) End If End Sub End Class Sub Main() Dim temp As Temperature = New Temperature() Try temp.showTemp() Catch e As TempIsZeroException Console.WriteLine("TempIsZeroException: {0}", e.Message) End Try Console.ReadKey() End Sub End Module
編譯並執行上述程式碼時,會產生以下結果:
TempIsZeroException: Zero Temperature found
丟擲物件
如果物件直接或間接地派生自 System.Exception 類,則可以丟擲該物件。
您可以在 catch 塊中使用 throw 語句來丟擲當前物件,如下所示:
Throw [ expression ]
以下程式演示了這一點:
Module exceptionProg Sub Main() Try Throw New ApplicationException("A custom exception _ is being thrown here...") Catch e As Exception Console.WriteLine(e.Message) Finally Console.WriteLine("Now inside the Finally Block") End Try Console.ReadKey() End Sub End Module
編譯並執行上述程式碼時,會產生以下結果:
A custom exception is being thrown here... Now inside the Finally Block