国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#基礎知識點之trycatch異常捕獲機制

2019-11-14 13:44:18
字體:
來源:轉載
供稿:網友
  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. }  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 攀枝花市| 博罗县| 和林格尔县| 基隆市| 建昌县| 莱芜市| 鄂温| 襄樊市| 通化市| 西城区| 乌兰浩特市| 穆棱市| 普陀区| 双辽市| 若尔盖县| 本溪| 岚皋县| 金溪县| 隆回县| 渑池县| 永吉县| 商丘市| 昭通市| 孝义市| 永福县| 双城市| 郓城县| 呼图壁县| 镇平县| 济南市| 天等县| 阿坝县| 南江县| 庆阳市| 遵义市| 衢州市| 广南县| 成都市| 卓尼县| 甘泉县| 美姑县|