C#異常處理知識彙總
概念
異常處理是指程式在執行過程中,發生錯誤會導致程式退出,這種錯誤,就叫做異常
但並不是所有的錯誤都是異常
而處理這種錯誤,稱為異常處理
異常處理實際是不斷去發掘異常、修改異常,使程式更穩定
異常處理主要表現在四個方面:
1 程式開發前:儘可能的想到會發生的錯誤,標註怎麼處理應對
2 程式開發中:儘量暴露程式的問題,解決這些可能的異常
3 系統釋出後:儘可能的解決隱藏的或測試人員未測試到的程式問題
4 發生異常時:異常程式碼轉化成了友好提示顯示給使用者
異常分類
編譯錯誤
1 大小寫混淆
2 資料型別與變數型別不符
3 使用未宣告的變數
執行錯誤
1 陣列下標越界
2 除數為零
3 其他執行錯誤
邏輯錯誤
1 超出資料型別的取值範圍
2 語句體忘記加大括號
3 其他邏輯性錯誤
異常處理操作
C#中異常處理時建立在四個關鍵詞之上:try、catch、finally 和 throw。
try:一個 try 塊標識了一個將被啟用的特定的異常的程式碼塊。後跟一個或多個 catch 塊
catch:程式通過異常處理程式捕獲異常。catch 關鍵字表示異常的捕獲
finally:用於執行給定的語句,不管異常是否被丟擲都會執行
throw:當問題出現時,程式丟擲一個異常。使用 throw 關鍵字來完成
異常語句格式
try { // 引起異常的語句 } catch( ExceptionName e ) { // 錯誤處理程式碼 } finally { // 要執行的語句 }
示例
using System; namespace DivisorIsZero { public class DivisorIsZero { private static void Main() { int div0 = 20; int div1 = 0; int div2 = 2; int DivValue; try { DivValue = div0 / div1; System.Console.WriteLine("div0 / div1 = {0}",DivValue); } catch(DivideByZeroException e ) { System.Console.WriteLine("零不能作為除數!異常值為:\n{0}",e); } // catch(DivideByZeroException e)子句只能捕獲特定的異常 // try內的程式程式碼可能還會產生其它的異常,這些異常只能由catch(Exception e)來捕獲了 catch(Exception e ) { System.Console.WriteLine("並非\''零作為除數引發的異常\"!異常值為:\n{0}",e); } finally { System.Console.WriteLine("無論是否發生異常,我都會顯示"); System.Console.ReadKey(); } } } }
結果
C#中常見的異常類
C# 異常是使用類來表示的
C# 中的異常類主要是直接或間接地派生於 System.Exception 類System.ApplicationException 和System.SystemException 類是派生於 System.Exception 類的異常類
System.ApplicationException 類支援由應用程式生成的異常。所以程式設計師定義的異常都應派生自該類
System.SystemException 類是所有預定義的系統異常的基類
由System.SystemException派生的異常型別:
System.AccessViolationException 在試圖讀寫受保護記憶體時引發的異常
System.ArgumentException 在向方法提供的其中一個引數無效時引發的異常
System.Collections.Generic.KeyNotFoundException 指定用於訪問集合中元素的鍵與集合中的任何鍵都不匹配時所引發的異常
System.IndexOutOfRangeException 訪問陣列時,因元素索引超出陣列邊界而引發的異常
System.InvalidCastException 因無效型別轉換或顯示轉換引發的異常
System.InvalidOperationException 當方法呼叫對於物件的當前狀態無效時引發的異常
System.InvalidProgramException 當程式包含無效Microsoft中間語言(MSIL)或元資料時引發的異常,這通常表示生成程式的編譯器中有bug
System.IO.IOException 發生I/O錯誤時引發的異常
System.NotImplementedException 在無法實現請求的方法或操作時引發的異常
System.NullReferenceException 嘗試對空物件引用進行操作時引發的異常
System.OutOfMemoryException 沒有足夠的記憶體繼續執行程式時引發的異常
System.StackOverflowException 掛起的方法呼叫過多而導致執行堆疊溢位時引發的異常
由System.ArgumentException派生的異常型別:
System.ArgumentNullException 當將空引用傳遞給不接受它作為有效引數的方法時引發的異常
System.ArgumentOutOfRangeException 當引數值超出呼叫的方法所定義的允許取值範圍時引發的異常
由System.ArithmeticException派生的異常型別:
System.DivideByZeroException 試圖用零除整數值或十進位制數值時引發的異常
System.NotFiniteNumberException 當浮點值為正無窮大、負無窮大或非數字(NaN)時引發的異常
System.OverflowException 在選中的上下文中所進行的算數運算、型別轉換或轉換操作導致溢位時引發的異常
由System.IOException派生的異常型別:
System.IO.DirectoryNotFoundException 當找不到檔案或目錄的一部分時所引發的異常
System.IO.DriveNotFoundException 當嘗試訪問的驅動器或共享不可用時引發的異常
System.IO.EndOfStreamException 讀操作試圖超出流的末尾時引發的異常
System.IO.FileLoadException 當找到託管程式卻不能載入它時引發的異常
System.IO.FileNotFoundException 試圖訪問磁碟上不存在的檔案失敗時引發的異常
System.IO.PathTooLongException 當路徑名或檔名超過系統定義的最大長度時引發的異常
其他常用異常型別:
ArrayTypeMismatchException 試圖在陣列中儲存錯誤型別的物件
BadImageFormatException 圖形的格式錯誤
DivideByZeroException 除零異常
DllNotFoundException 找不到引用的dll
FormatException 引數格式錯誤
MethodAccessException 試圖訪問私有或者受保護的方法
MissingMemberException 訪問一個無效版本的dll
NotSupportedException 呼叫的方法在類中沒有實現
PlatformNotSupportedException 平臺不支援某個特定屬性時丟擲該錯誤
以上就是C#異常處理知識彙總的詳細內容,更多關於C#異常處理的資料請關注我們其它相關文章!