一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C#中的異常捕獲機制(try catch finally)

 張氏家族Zhang 2018-04-26

轉(zhuǎn)載自:http://blog.csdn.net/zevin/article/details/6901489

  1. 一、C#的異常處理所用到關(guān)鍵字    
  2. try 用于檢查發(fā)生的異常,并幫助發(fā)送任何可能的異常。    
  3. catch 以控制權(quán)更大的方式處理錯誤,可以有多個catch子句。    
  4. finally 無論是否引發(fā)了異常,finally的代碼塊都將被執(zhí)行。    
  5. throw 用于引發(fā)異常,可引發(fā)預(yù)定義異常和自定義異常。    
  6.     
  7. 二、C#異常處理的格式    
  8. try    
  9. {    
  10. 程序代碼塊;    
  11. }    
  12. catch(Exception e)    
  13. {    
  14. 異常處理代碼塊;    
  15. }    
  16. finally    
  17. {    
  18. 無論是否發(fā)生異常,均要執(zhí)行的代碼塊;    
  19. }    
  20.     
  21. 三、異常處理實戰(zhàn)    
  22. 一個除數(shù)和零的簡單例子:    
  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)這一行將不會被執(zhí)行。    
  37. }    
  38. catch    
  39. {    
  40. System.Console.WriteLine("傳遞過來的異常值為:{0}",e);    
  41. }    
  42. finally    
  43. {    
  44. System.Console.WriteLine("無論是否發(fā)生異常,我都會顯示。");    
  45. }    
  46. }    
  47. }    
  48. 注:(1)行被執(zhí)行則會拋出一個異常,如果沒有catch語句,程序會異常終止,使用不帶參數(shù)的catch子句,則可以捕獲任意類型的異常。    
  49. 如果將(1)行注釋掉,啟用(2)行,這意味該程序運行時不會出現(xiàn)異常,從輸出可知,finally代碼塊仍將被執(zhí)行。    
  50.     
  51. 可以給try語句提供多個catch語句,以捕獲特定的異常,如上例中:0作為除數(shù)則會引發(fā)DivideByZeroException類型的異常,上例中的catch語句可以作如下修改:    
  52. catch(DivideByZeroException e)    
  53. {    
  54. System.Console.WriteLine("零不能作為除數(shù)!異常值為:\n{0}",e);    
  55. }    
  56. catch(Exception e)    
  57. {    
  58. System.Console.WriteLine("并非\''零作為除數(shù)引發(fā)的異常\"!異常值為:\n{0}",e);    
  59. }    
  60.     
  61. 為什么還要加上一個catch(Exception e)子句呢?原因很簡單,catch(DivideByZeroException e)子句只能捕獲特定的異常,try內(nèi)的程序代碼可能還會產(chǎn)生其它的異常,這些異常只能由catch(Exception e)來捕獲了。    
  62.     
  63. 下表給出了一些常見的異常:    
  64.     
  65. System名稱空間中常用的異常類    
  66.     
  67. 異常類名稱 簡單描述    
  68.     
  69. MemberAccessException 訪問錯誤:類型成員不能被訪問    
  70.     
  71. ArgumentException 參數(shù)錯誤:方法的參數(shù)無效    
  72.     
  73. ArgumentNullException 參數(shù)為空:給方法傳遞一個不可接受的空參數(shù)    
  74.     
  75. ArithmeticException 數(shù)學(xué)計算錯誤:由于數(shù)學(xué)運算導(dǎo)致的異常,覆蓋面廣。    
  76.     
  77. ArrayTypeMismatchException 數(shù)組類型不匹配    
  78.     
  79. DivideByZeroException 被零除    
  80.     
  81. FormatException 參數(shù)的格式不正確    
  82.     
  83. IndexOutOfRangeException 索引超出范圍,小于0或比最后一個元素的索引還大    
  84.     
  85. InvalidCastException 非法強制轉(zhuǎn)換,在顯式轉(zhuǎn)換失敗時引發(fā)    
  86.     
  87. MulticastNotSupportedException 不支持的組播:組合兩個非空委派失敗時引發(fā)    
  88.     
  89. NotSupportedException 調(diào)用的方法在類中沒有實現(xiàn)    
  90.     
  91. NullReferenceException 引用空引用對象時引發(fā)    
  92.     
  93. OutOfMemoryException 無法為新語句分配內(nèi)存時引發(fā),內(nèi)存不足    
  94.     
  95. OverflowException 溢出    
  96.     
  97. StackOverflowException 棧溢出    
  98.     
  99. TypeInitializationException 錯誤的初始化類型:靜態(tài)構(gòu)造函數(shù)有問題時引發(fā)    
  100.     
  101. NotFiniteNumberException 無限大的值:數(shù)字不合法    
  102.     
  103. 四、定義自己的異常類    
  104.     
  105. 除了預(yù)定義的異常外,我們還可以創(chuàng)建自己的異常,過程比較簡單:    
  106.     
  107. 一聲明一個異常,格式如下:    
  108.     
  109. class ExceptionName:Exception{}    
  110.     
  111. 二引發(fā)自己的異常:    
  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();//引發(fā)異常    
  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("出現(xiàn)異常,這行是不會被執(zhí)行的。");    
  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. }   

【總結(jié)】

        又遇到了異常處理,看了這篇文章,知道了很多東西,如何獲取預(yù)定義的異常,如何自定義異常。接下來,要去實踐一下了。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    久久国产青偷人人妻潘金莲| 欧美日韩亚洲国产精品| 99热九九在线中文字幕| 国产又色又粗又黄又爽| 国产精品香蕉免费手机视频| 午夜精品麻豆视频91| 中文字幕精品一区二区年下载| 亚洲欧美国产精品一区二区| 欧美黑人暴力猛交精品| 激情内射亚洲一区二区三区| 男人和女人干逼的视频| 欧美亚洲另类久久久精品| 久久香蕉综合网精品视频| 亚洲欧美精品伊人久久| 午夜精品国产一区在线观看| 国语久精品在视频在线观看| 国产成人一区二区三区久久 | 色偷偷偷拍视频在线观看| 亚洲天堂男人在线观看| 91亚洲精品国产一区| 国产免费一区二区三区不卡| 亚洲品质一区二区三区| 深夜少妇一区二区三区| 人妻亚洲一区二区三区| 日韩中文字幕在线不卡一区| 精品人妻一区二区四区| 四十女人口红哪个色好看| 日韩一级毛一欧美一级乱| 偷拍洗澡一区二区三区| 日韩国产欧美中文字幕| 四十女人口红哪个色好看| 精品日韩欧美一区久久| 性欧美唯美尤物另类视频| 亚洲一区二区三区三区| 欧美日韩校园春色激情偷拍| 内用黄老外示儒术出处| 丁香六月婷婷基地伊人| 日本大学生精油按摩在线观看| 国产欧美日韩视频91| 精品推荐久久久国产av| 国产香蕉国产精品偷在线观看 |