程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#基礎知識點之try catch 異常捕獲機制,

C#基礎知識點之try catch 異常捕獲機制,

編輯:C#入門知識

C#基礎知識點之try catch 異常捕獲機制,


  1. 一、C#的異常處理所用到關鍵字  
  2. try 用於檢查發生的異常,並幫助發送任何可能的異常。  
  3. catch 以控制權更大的方式處理錯誤,可以有多個catch子句。  
  4. finally 無論是否引發了異常,finally的代碼塊都將被執行。  
  5. throw 用於引發異常,可引發預定義異常和自定義異常。  
  6.   
  7. 二、C#異常處理的格式  
  8. try  
  9. {  
  10. 程序代碼塊;  
  11. }  
  12. catch(Exception e)  
  13. {  
  14. 異常處理代碼塊;  
  15. }  
  16. finally  
  17. {  
  18. 無論是否發生異常,均要執行的代碼塊;  
  19. }  
  20.   
  21. 三、異常處理實戰  
  22. 一個除數和零的簡單例子:  
  23. public class DivisorIsZero  
  24. {  
  25. private static void Main()  
  26. {  
  27. int dividend=10;  
  28. int divisor1=0;  
  29. int divisor2=5;  
  30. int DivideValue;  
  31.   
  32. try  
  33. {  
  34. DivideValue=dividend/divisor1; //(1)  
  35. //DivideValue=dividend/divisor2; //(2)  
  36. System.Console.WriteLine("DivideValue={0}",DivideValue);//(3)這一行將不會被執行。  
  37. }  
  38. catch  
  39. {  
  40. System.Console.WriteLine("傳遞過來的異常值為:{0}",e);  
  41. }  
  42. finally  
  43. {  
  44. System.Console.WriteLine("無論是否發生異常,我都會顯示。");  
  45. }  
  46. }  
  47. }  
  48. 注:(1)行被執行則會拋出一個異常,如果沒有catch語句,程序會異常終止,使用不帶參數的catch子句,則可以捕獲任意類型的異常。  
  49. 如果將(1)行注釋掉,啟用(2)行,這意味該程序運行時不會出現異常,從輸出可知,finally代碼塊仍將被執行。  
  50.   
  51. 可以給try語句提供多個catch語句,以捕獲特定的異常,如上例中:0作為除數則會引發DivideByZeroException類型的異常,上例中的catch語句可以作如下修改:  
  52. catch(DivideByZeroException e)  
  53. {  
  54. System.Console.WriteLine("零不能作為除數!異常值為:\n{0}",e);  
  55. }  
  56. catch(Exception e)  
  57. {  
  58. System.Console.WriteLine("並非\''零作為除數引發的異常\"!異常值為:\n{0}",e);  
  59. }  
  60.   
  61. 為什麼還要加上一個catch(Exception e)子句呢?原因很簡單,catch(DivideByZeroException e)子句只能捕獲特定的異常,try內的程序代碼可能還會產生其它的異常,這些異常只能由catch(Exception e)來捕獲了。  
  62.   
  63. 下表給出了一些常見的異常:  
  64.   
  65. System名稱空間中常用的異常類  
  66.   
  67. 異常類名稱 簡單描述  
  68.   
  69. MemberAccessException 訪問錯誤:類型成員不能被訪問  
  70.   
  71. ArgumentException 參數錯誤:方法的參數無效  
  72.   
  73. ArgumentNullException 參數為空:給方法傳遞一個不可接受的空參數  
  74.   
  75. ArithmeticException 數學計算錯誤:由於數學運算導致的異常,覆蓋面廣。  
  76.   
  77. ArrayTypeMismatchException 數組類型不匹配  
  78.   
  79. DivideByZeroException 被零除  
  80.   
  81. FormatException 參數的格式不正確  
  82.   
  83. IndexOutOfRangeException 索引超出范圍,小於0或比最後一個元素的索引還大  
  84.   
  85. InvalidCastException 非法強制轉換,在顯式轉換失敗時引發  
  86.   
  87. MulticastNotSupportedException 不支持的組播:組合兩個非空委派失敗時引發  
  88.   
  89. NotSupportedException 調用的方法在類中沒有實現  
  90.   
  91. NullReferenceException 引用空引用對象時引發  
  92.   
  93. OutOfMemoryException 無法為新語句分配內存時引發,內存不足  
  94.   
  95. OverflowException 溢出  
  96.   
  97. StackOverflowException 棧溢出  
  98.   
  99. TypeInitializationException 錯誤的初始化類型:靜態構造函數有問題時引發  
  100.   
  101. NotFiniteNumberException 無限大的值:數字不合法  
  102.   
  103. 四、定義自己的異常類  
  104.   
  105. 除了預定義的異常外,我們還可以創建自己的異常,過程比較簡單:  
  106.   
  107. 一聲明一個異常,格式如下:  
  108.   
  109. class ExceptionName:Exception{}  
  110.   
  111. 二引發自己的異常:  
  112.   
  113. throw(ExceptionName);  
  114.   
  115. 看一個例子:  
  116. class IAmSecondGrade:System.Exception{}//聲明異常  
  117.   
  118. class SecondGrade  
  119. {  
  120. public static int mul(int first,int second)  
  121. {  
  122. if(first>100||second>100)  
  123. throw new IAmSecondGrade();//引發異常  
  124. return (first*second);  
  125. }  
  126.   
  127. public static void Main()  
  128. {  
  129. int mul_value;  
  130.   
  131. try  
  132. {  
  133. mul_value=mul(99,56);  
  134. System.Console.WriteLine("99與56積為:{0}",mul_value);  
  135. mul_value=mul(101,4);  
  136. System.Console.WriteLine("出現異常,這行是不會被執行的。");  
  137. }  
  138. catch(IAmSecondGrade)//捕獲自定義的異常  
  139. {  
  140. System.Console.WriteLine("我才上二年級,超過100的乘法我不會。嘿嘿,我自定義的異常。");  
  141. }  
  142. catch(System.Exception e)  
  143. {  
  144. System.Console.WriteLine("非自定義異常。其值為:{0}",e);  
  145. }  
  146. }  
  147. }  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved