C#錯誤和異常(二)捕獲異常

C#捕獲異常

C#中是怎麼捕獲異常的呢?這其中用到了幾種常見的語句。
主要的關鍵字和語句如下所示:

try 塊包含的代碼組成了程序的正常操作部分,但這部分程序可能遇到某些嚴重錯誤

catch 塊包含的代碼處理各種錯誤情況,這些錯誤是執行try塊中代碼時遇到的。這個快還可以用於記錄錯誤

finally 塊包含的代碼清理資源或執行通常要在try塊或catch塊末尾執行的其他操作。無論是否拋出異常,都
會執行finally塊。

throw 拋出指定錯誤類的對象,通常throw在try語句塊中。

正常情況下數據流流動的情況如下:
(1)、執行的程序流進入try塊。
(2)、如果在try語句中沒有出現錯誤,try塊中的程序會執行完畢。如果有錯誤碰到了throw的話,那麼程序會直接跳轉到合適的catch語句,throw後面的語句不會執行。
(3)、在catch中執行相關錯誤。
(4)、在catch塊中執行完成後如果存在一個finally塊,程序流就會自動進入finally塊。
(5)、執行finally塊(如果存在)。相關語法演示如下:
           

 try
 {
     //throw new OutMaxExcption("測試");  //throw會阻斷後面的語句執行,直接跳轉到catch語句中

     Console.WriteLine("請輸入要訪問的數組下標");
     int inputNumber = int.Parse(Console.ReadLine());
     if (inputNumber > 100)
     {
        throw new OutMaxExcption("超過最大值"); 
        Console.WriteLine("已經拋出超過最大值錯誤"); //實際上這段代碼永遠不會執行
     }                
     else if (inputNumber < 10 && inputNumber > 0)
     {
        throw new OutMinException("小於最小值");   
        Console.WriteLine("已經拋出小於最小值錯誤"); //實際上這段代碼永遠不會執行
     }                
     else if (inputNumber == 0)
     {
        throw new ValueIsZeroException("值爲零");
        Console.WriteLine("已經拋出值爲零錯誤");     //實際上這段代碼永遠不會執行
                    
     }                   
     else if (inputNumber < 0)
     {
        throw new IndexOutOfRangeException("索引值不正確");
        Console.WriteLine("已經拋出爲負值錯誤");     //實際上這段代碼永遠不會執行
     }                  
     else
        Console.WriteLine("OK,輸入正確");
     }

     //捕捉語句
     catch (OutMaxExcption ex)     //專門捕捉和處理OutMaxException的錯誤,其他不處理
     {
        Console.WriteLine(ex.Message);
     }
     catch (OutMinException ex)    //專門捕捉和處理OutMinException的錯誤,其他不處理
     {
        Console.WriteLine(ex.Message);
     }
     catch (ValueIsZeroException ex) //專門捕捉和處理ValueIsZeroException的錯誤,其他不處理
     {
        Console.WriteLine(ex.Message);
     }

     catch  //如果catch沒條件的話,它也可以接受所有錯誤的類,但是它與catch(Exception ex)共存的時候,程序會優先跳轉到catch(Exception ex)語句中
     {
        Console.WriteLine("有一個錯誤發生了,但不知道具體錯誤是什麼因爲我是通用的catch");
     }
     //catch (Exception ex)  //此分支與上面的分支共存的時候,本分支優先級高於上面無條件的catch
     //{

     //    Console.WriteLine(ex.Message);
     //}


     //無論有沒有錯誤,都會執行finally語句。當然finally語句可以省略
     finally
     {
        Console.WriteLine("這是finally塊");
     }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章