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塊");
}