C#異常處理知識(shí)匯總
概念
異常處理是指程序在運(yùn)行過程中,發(fā)生錯(cuò)誤會(huì)導(dǎo)致程序退出,這種錯(cuò)誤,就叫做異常
但并不是所有的錯(cuò)誤都是異常
而處理這種錯(cuò)誤,稱為異常處理
異常處理實(shí)際是不斷去發(fā)掘異常、修改異常,使程序更穩(wěn)定
異常處理主要表現(xiàn)在四個(gè)方面:
程序開發(fā)前:盡可能的想到會(huì)發(fā)生的錯(cuò)誤,標(biāo)注怎么處理應(yīng)對(duì)
程序開發(fā)中:盡量暴露程序的問題,解決這些可能的異常
系統(tǒng)發(fā)布后:盡可能的解決隱藏的或測試人員未測試到的程序問題
發(fā)生異常時(shí):異常代碼轉(zhuǎn)化成了友好提示顯示給用戶
異常分類
編譯錯(cuò)誤
大小寫混淆
數(shù)據(jù)類型與變量類型不符
使用未聲明的變量
運(yùn)行錯(cuò)誤
數(shù)組下標(biāo)越界
除數(shù)為零
其他運(yùn)行錯(cuò)誤
邏輯錯(cuò)誤
超出數(shù)據(jù)類型的取值范圍
語句體忘記加大括號(hào)
其他邏輯性錯(cuò)誤
異常處理操作
C#中異常處理時(shí)建立在四個(gè)關(guān)鍵詞之上:try、catch、finally 和 throw。
try:一個(gè) try 塊標(biāo)識(shí)了一個(gè)將被激活的特定的異常的代碼塊。后跟一個(gè)或多個(gè) catch 塊
catch:程序通過異常處理程序捕獲異常。catch 關(guān)鍵字表示異常的捕獲
finally:用于執(zhí)行給定的語句,不管異常是否被拋出都會(huì)執(zhí)行
throw:當(dāng)問題出現(xiàn)時(shí),程序拋出一個(gè)異常。使用 throw 關(guān)鍵字來完成
異常語句格式
try { // 引起異常的語句 } catch( ExceptionName e ) { // 錯(cuò)誤處理代碼 } finally { // 要執(zhí)行的語句 }
示例
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("零不能作為除數(shù)!異常值為:\n{0}",e); } // catch(DivideByZeroException e)子句只能捕獲特定的異常 // try內(nèi)的程序代碼可能還會(huì)產(chǎn)生其它的異常,這些異常只能由catch(Exception e)來捕獲了 catch(Exception e ) { System.Console.WriteLine("并非\''零作為除數(shù)引發(fā)的異常\"!異常值為:\n{0}",e); } finally { System.Console.WriteLine("無論是否發(fā)生異常,我都會(huì)顯示"); System.Console.ReadKey(); } } } }
結(jié)果
C#中常見的異常類
C# 異常是使用類來表示的
C# 中的異常類主要是直接或間接地派生于 System.Exception 類System.ApplicationException 和System.SystemException 類是派生于 System.Exception 類的異常類
System.ApplicationException 類支持由應(yīng)用程序生成的異常。所以程序員定義的異常都應(yīng)派生自該類
System.SystemException 類是所有預(yù)定義的系統(tǒng)異常的基類
由System.SystemException派生的異常類型:
System.AccessViolationException 在試圖讀寫受保護(hù)內(nèi)存時(shí)引發(fā)的異常
System.ArgumentException 在向方法提供的其中一個(gè)參數(shù)無效時(shí)引發(fā)的異常
System.Collections.Generic.KeyNotFoundException 指定用于訪問集合中元素的鍵與集合中的任何鍵都不匹配時(shí)所引發(fā)的異常
System.IndexOutOfRangeException 訪問數(shù)組時(shí),因元素索引超出數(shù)組邊界而引發(fā)的異常
System.InvalidCastException 因無效類型轉(zhuǎn)換或顯示轉(zhuǎn)換引發(fā)的異常
System.InvalidOperationException 當(dāng)方法調(diào)用對(duì)于對(duì)象的當(dāng)前狀態(tài)無效時(shí)引發(fā)的異常
System.InvalidProgramException 當(dāng)程序包含無效Microsoft中間語言(MSIL)或元數(shù)據(jù)時(shí)引發(fā)的異常,這通常表示生成程序的編譯器中有bug
System.IO.IOException 發(fā)生I/O錯(cuò)誤時(shí)引發(fā)的異常
System.NotImplementedException 在無法實(shí)現(xiàn)請(qǐng)求的方法或操作時(shí)引發(fā)的異常
System.NullReferenceException 嘗試對(duì)空對(duì)象引用進(jìn)行操作時(shí)引發(fā)的異常
System.OutOfMemoryException 沒有足夠的內(nèi)存繼續(xù)執(zhí)行程序時(shí)引發(fā)的異常
System.StackOverflowException 掛起的方法調(diào)用過多而導(dǎo)致執(zhí)行堆棧溢出時(shí)引發(fā)的異常
由System.ArgumentException派生的異常類型:
System.ArgumentNullException 當(dāng)將空引用傳遞給不接受它作為有效參數(shù)的方法時(shí)引發(fā)的異常
System.ArgumentOutOfRangeException 當(dāng)參數(shù)值超出調(diào)用的方法所定義的允許取值范圍時(shí)引發(fā)的異常
由System.ArithmeticException派生的異常類型:
System.DivideByZeroException 試圖用零除整數(shù)值或十進(jìn)制數(shù)值時(shí)引發(fā)的異常
System.NotFiniteNumberException 當(dāng)浮點(diǎn)值為正無窮大、負(fù)無窮大或非數(shù)字(NaN)時(shí)引發(fā)的異常
System.OverflowException 在選中的上下文中所進(jìn)行的算數(shù)運(yùn)算、類型轉(zhuǎn)換或轉(zhuǎn)換操作導(dǎo)致溢出時(shí)引發(fā)的異常
由System.IOException派生的異常類型:
System.IO.DirectoryNotFoundException 當(dāng)找不到文件或目錄的一部分時(shí)所引發(fā)的異常
System.IO.DriveNotFoundException 當(dāng)嘗試訪問的驅(qū)動(dòng)器或共享不可用時(shí)引發(fā)的異常
System.IO.EndOfStreamException 讀操作試圖超出流的末尾時(shí)引發(fā)的異常
System.IO.FileLoadException 當(dāng)找到托管程序卻不能加載它時(shí)引發(fā)的異常
System.IO.FileNotFoundException 試圖訪問磁盤上不存在的文件失敗時(shí)引發(fā)的異常
System.IO.PathTooLongException 當(dāng)路徑名或文件名超過系統(tǒng)定義的最大長度時(shí)引發(fā)的異常
其他常用異常類型:
ArrayTypeMismatchException 試圖在數(shù)組中存儲(chǔ)錯(cuò)誤類型的對(duì)象
BadImageFormatException 圖形的格式錯(cuò)誤
DivideByZeroException 除零異常
DllNotFoundException 找不到引用的dll
FormatException 參數(shù)格式錯(cuò)誤
MethodAccessException 試圖訪問私有或者受保護(hù)的方法
MissingMemberException 訪問一個(gè)無效版本的dll
NotSupportedException 調(diào)用的方法在類中沒有實(shí)現(xiàn)
PlatformNotSupportedException 平臺(tái)不支持某個(gè)特定屬性時(shí)拋出該錯(cuò)誤
以上就是C#異常處理知識(shí)匯總的詳細(xì)內(nèi)容,更多關(guān)于C#異常處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C# GetField方法的應(yīng)用實(shí)例講解
C#中的GetField是一個(gè)反射方法,用于獲取指定類型的字段信息,它可以通過字段名稱來獲取字段對(duì)象,并且可以在運(yùn)行時(shí)動(dòng)態(tài)地訪問和操作這些字段,本文給大家介紹了C# GetField方法的應(yīng)用,需要的朋友可以參考下2024-04-04使用策略模式實(shí)現(xiàn)報(bào)警服務(wù)示例詳解(短信報(bào)警)
服務(wù)的功能:這個(gè)服務(wù)就是能夠?qū)崿F(xiàn)多通路報(bào)警的服務(wù),比如郵件報(bào)警、客戶端報(bào)警、短信報(bào)警等,該服務(wù)靈活性還不錯(cuò),比較方便擴(kuò)展2014-01-01Unity實(shí)現(xiàn)移動(dòng)端手勢(shì)解鎖功能
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)移動(dòng)端手勢(shì)解鎖功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07C# WinForm窗體編程中處理數(shù)字的正確操作方法
這篇文章主要介紹了C# WinForm窗體編程中處理數(shù)字的正確操作方法,本文給出了正確示例,并解釋了為什么要這么做,需要的朋友可以參考下2014-08-08C#獲取某路徑文件夾中全部圖片或其它指定格式的文件名的實(shí)例方法
在本篇文章里小編給大家整理的是關(guān)于C#獲取某路徑文件夾中全部圖片或其它指定格式的文件名的實(shí)例方法,需要的朋友們參考下。2019-10-10SQLServer批量插入數(shù)據(jù)的三種方式及性能對(duì)比
本文詳細(xì)講解了SQLServer批量插入數(shù)據(jù)的三種方式及性能對(duì)比,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12C#基于Socket的TCP通信實(shí)現(xiàn)聊天室案例
這篇文章主要為大家詳細(xì)介紹了C#基于Socket的TCP通信實(shí)現(xiàn)聊天室案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02Asp.Net中避免重復(fù)提交和彈出提示框的實(shí)例代碼
本文分為前臺(tái)和后臺(tái)代碼實(shí)現(xiàn)避免重復(fù)提交和彈出提示框效果,代碼簡單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下2017-02-02