天天看點

windows - 異常原理與程式排錯異常類應用示例.NET 平台内置異常類程式的簡單排錯

異常處理不能改變程式無法正常運作的試試,但是給出具有參考價值的出錯資訊,并且能大大增強程式的健壯性

異常處理使用try,catch和finally關鍵詞來嘗試可能未成功的操作、處理失敗以及時候清理資源。

  • try 語句塊也可以嵌套,可以将代碼的異常處理置于不同的子try語句塊。
  • catch 代碼塊也可稱作“異常篩選器“,可以有多個,每個catch塊隻是的異常類都是Exception類型或者其派生類型。
  • 多個catch塊的補貨順序是從頂部到底部,對于所引發的每個異常,都隻執行一個catch塊,如果一系列的catch塊所設定的異常類存在繼承關系,會按照catch出現的順序找到比對的第1各類,并執行其相應的代碼,而不再執行後續可以比對的異常類 按照最先比對處理,而不是按最佳比對
  • finally文法塊無論是否引發異常都會執行,可以使用finally 塊清理在try塊中執行的操作,例如釋放資源(如檔案流、資料庫連接配接和圖形句柄)finally塊始終會執行,而與是否引發異常或者是否找到與異常類型比對的catch塊無關。

    異常類Exception具有幾個非常有用的屬性

  1. TargetSite 抛出異常的成員函數名
  2. Source 抛出異常的編譯檔案名
  3. Message 每個異常的預設消息内容
  4. StackTrace 引起異常的調用堆棧路徑,包含路徑、檔案和行資訊

異常類應用示例

使用者在TextBox控件中輸入整數時,通過textBox的Text屬性獲得String對象,将string對象轉換為整數值可使用Int32對象的Parse方法,它可能産生3個異常

異常名 異常原因
ArgumentNullException 參數為null
FormatException 參數的格式不正确
OverflowException 參數的值超出給定範圍

.NET 平台内置異常類

NullReferenceExcetion異常類

.NET平台中的對象都派生自Object類,對象成員儲存在記憶體中,Object類含有對成員的引用資訊。Object類封裝對成員的引用,對象在建立時配置設定成員的記憶體位址,對象的初始化就是對記憶體空間指派。

如果對象沒有初始化而調用對象的方法或屬性時就會引發NullReferenceException了異常,它表明引用的内容為空。

InvaildCastException異常類

嘗試取消裝箱null或對不相容值類型的引用導緻InvaildCastException。這類異常的發生通常是開發人員在使用集合對象時,裝入時的資料類型與取出時進行的類型轉換不比對造成的,例如咋恍如的是Int類型,取出時對其進行float的類型轉換。

FormatException異常類

字元串轉化為實際數字時可能産生FormatException異常,例如使用者輸入的是字母

程式的簡單排錯

編譯器是基于詞法或句法的檢查發現代碼錯誤的,但編譯器不能領會開者的實際意圖,對于算法和邏輯設計上的錯誤是無能為力的。編譯成功可運作的程式也會包含結構錯誤。開發者不僅要反複調試運作自己的程式,還必須通過正确分析和反複驗證才能生産合格的軟體産品。

繼續閱讀