C# 中的異常捕獲和處理
阿新 • • 發佈:2019-01-22
異常是程式執行中發生的錯誤,異常處理是程式的一部分,錯誤的出現並不總是編寫應用程式設計師的原因,有事應用程式會因為終端使用者的操作而發生錯誤。無論如何,在編寫程式前都應該預測應用程式和程式碼中出現的錯誤。
使用者不能獲得對異常物件的訪問,而該物件含 有重要的出錯星星,也就不能得到出錯的資訊。清除、處理所有異常如果使用者對產生錯誤不進行處理,而消除產生的錯誤分配的資源try{ // 包含容易產生異常的程式碼}finally{ //用於消除try 塊中分配的任何資源以及 執行任何即使在發生異常時也必須執行的程式碼}最好的組合,合併兩種錯誤處理技術,即捕獲錯誤、消除並繼續執行應用程式try{ //包含容易產生異常的程式碼}catct(異常類 ,異常例項物件){ //異常處理程式碼}finally{ //用於消除try 塊中分配的任何資源以及 執行任何即使在發生異常時也必須執行的程式碼 }注意:處理異常會大大地降低效能,不妥將他用在控制正常程式流程中,如採用有可能檢測到程式碼中 導致異常的狀態,請執行這種操作。 不妥在處理該狀態之前捕獲異常本是,如除一個數時,可通過if先判斷資料不等0,然後在進行相除。引發異常在編寫程式是,有事肯要引發異常,以便捕獲異常引發異常的格式為:throw new 異常類(異常資訊);異常類 :預定義,自定義異常資訊:字串“格式轉換錯誤”例項 :為Program 類定義一個將字串轉換成整數的私有靜態方法StringToInt;它含有一個字串型別引數,返回一個整數,然後通過這個使用方法將一個不能轉換成整數的字串轉換成整數故而引發異常,
預定義異常類
自定義異常類C#語言雖然預定義了許多異常類,但是,在有些場合,建立自己的異常類可能會方便。自定義異常類是通過繼承System.Excetion類來建立自己的異常宣告異常的格式:class 自定義的異常了嗎:Exception{}引發異常格式throw(自定義異常類名)
C# 異常處理時建立在四個關鍵詞之上的:try、catch、finally 和 throw。
try:一個 try 塊標識了一個將被啟用的特定的異常的程式碼塊。後跟一個或多個 catch 塊
catch:程式通過異常處理程式捕獲異常。catch 關鍵字表示異常的捕獲
finally:finally 塊用於執行給定的語句,不管異常是否被丟擲都會執行。例如,如果您開啟一個檔案,不管是否出現異常檔案都要被關閉
throw:當問題出現時,程式丟擲一個異常。使用 throw 關鍵字來完成。
三種異常的處理語句1.try ... catch //捕獲異常2.try ... finally //清除異常3.try ... catch ... finally // 處理所有異常捕獲異常:try{ //包含容易產生異常的程式碼}catct(異常類 ,異常例項物件){ //異常處理程式碼}namespace 捕獲異常 { class Program { static void Main(string[] args) { //利用 try catch 語句捕獲陣列越界問題 int[] arr = { 0, 1, 2, 3, 1, 2, 3, 3, 4, 5 }; try { for (int i = 0; i <= arr.Length; i++) { Console.Write(arr[i] + " "); } } catch(Exception myex) { //Message.Tostring()中的Message是獲取描述當前異常訊息 Console.WriteLine(myex.Message.ToString()); } //此語句雖然可以給出異常提示,並不能智慧描述異常的原因 //catch { Console.WriteLine("發生異常"); } Console.ReadKey(); } } }
使用者不能獲得對異常物件的訪問,而該物件含 有重要的出錯星星,也就不能得到出錯的資訊。清除、處理所有異常如果使用者對產生錯誤不進行處理,而消除產生的錯誤分配的資源try{ // 包含容易產生異常的程式碼}finally{ //用於消除try 塊中分配的任何資源以及 執行任何即使在發生異常時也必須執行的程式碼}最好的組合,合併兩種錯誤處理技術,即捕獲錯誤、消除並繼續執行應用程式try{ //包含容易產生異常的程式碼}catct(異常類 ,異常例項物件){ //異常處理程式碼}finally{ //用於消除try 塊中分配的任何資源以及 執行任何即使在發生異常時也必須執行的程式碼
namespace 引發異常
{
class Program
{
private static int StringToInt(string mystr) {
int outnum = 0;
try
{
outnum = Convert.ToInt32(mystr);
return outnum;
}
catch
{
throw new FormatException("格式不正確(自己寫的)");
}
}
static void Main(string[] args)
{
string str = "51zxw";
try
{
Console.WriteLine(StringToInt(str));
}catch(FormatException ex)
{
Console.WriteLine(ex.Message.ToString());
}
Console.ReadKey();
}
}
}
預定義異常類
異常類 | 說明 |
Exception | 所有異常物件的基類 |
SystemException | 執行時產生的所有錯誤的基類 |
IdexOutOfRangeExceptiom | 當陣列的下標超出範圍時執行時引發 |
NullRefereceException | 當一個空物件被引用時執行時引發 |
ArgunmentException | 所有引數異常的基類 |
InvalidCastException | 型別的顯示轉換在執行是失敗時,就會引發異常 |
ArrayTypeMismathException | 當儲存一個數組是,如果由於被儲存的元素實際型別與陣列的實際型別不相容而導致儲存失敗就會引發此異常 |
ArithmeticException | 算術運算期間異常發生的基類 |
DivideByZeroException | 試圖除以0引發 |
OverflowException | 溢位時引發 |
FormatException | 引數格式無效是引發 |