C#基础知识点之try catch 异常捕获机制

  1. 一、C#的异常处理所用到关键字
  2. try 用于检查发生的异常,并帮助发送任何可能的异常。
  3. catch 以控制权更大的方式处理错误,可以有多个catch子句。
  4. finally 无论是否引发了异常,finally的代码块都将被执行。
  5. throw 用于引发异常,可引发预定义异常和自定义异常。
  6. 二、C#异常处理的格式
  7. try
  8. {
  9. 程序代码块;
  10. }
  11. catch(Exception e)
  12. {
  13. 异常处理代码块;
  14. }
  15. finally
  16. {
  17. 无论是否发生异常,均要执行的代码块;
  18. }
  19. 三、异常处理实战
  20. 一个除数和零的简单例子:
  21. public class DivisorIsZero
  22. {
  23. private static void Main()
  24. {
  25. int dividend=10;
  26. int divisor1=0;
  27. int divisor2=5;
  28. int DivideValue;
  29. try
  30. {
  31. DivideValue=dividend/divisor1; //(1)
  32. //DivideValue=dividend/divisor2; //(2)
  33. System.Console.WriteLine("DivideValue={0}",DivideValue);//(3)这一行将不会被执行。
  34. }
  35. catch
  36. {
  37. System.Console.WriteLine("传递过来的异常值为:{0}",e);
  38. }
  39. finally
  40. {
  41. System.Console.WriteLine("无论是否发生异常,我都会显示。");
  42. }
  43. }
  44. }
  45. 注:(1)行被执行则会抛出一个异常,如果没有catch语句,程序会异常终止,使用不带参数的catch子句,则可以捕获任意类型的异常。
  46. 如果将(1)行注释掉,启用(2)行,这意味该程序运行时不会出现异常,从输出可知,finally代码块仍将被执行。
  47. 可以给try语句提供多个catch语句,以捕获特定的异常,如上例中:0作为除数则会引发DivideByZeroException类型的异常,上例中的catch语句可以作如下修改:
  48. catch(DivideByZeroException e)
  49. {
  50. System.Console.WriteLine("零不能作为除数!异常值为:\n{0}",e);
  51. }
  52. catch(Exception e)
  53. {
  54. System.Console.WriteLine("并非\‘‘零作为除数引发的异常\"!异常值为:\n{0}",e);
  55. }
  56. 为什么还要加上一个catch(Exception e)子句呢?原因很简单,catch(DivideByZeroException e)子句只能捕获特定的异常,try内的程序代码可能还会产生其它的异常,这些异常只能由catch(Exception e)来捕获了。
  57. 下表给出了一些常见的异常:
  58. System名称空间中常用的异常类
  59. 异常类名称 简单描述
  60. MemberAccessException 访问错误:类型成员不能被访问
  61. ArgumentException 参数错误:方法的参数无效
  62. ArgumentNullException 参数为空:给方法传递一个不可接受的空参数
  63. ArithmeticException 数学计算错误:由于数学运算导致的异常,覆盖面广。
  64. ArrayTypeMismatchException 数组类型不匹配
  65. DivideByZeroException 被零除
  66. FormatException 参数的格式不正确
  67. IndexOutOfRangeException 索引超出范围,小于0或比最后一个元素的索引还大
  68. InvalidCastException 非法强制转换,在显式转换失败时引发
  69. MulticastNotSupportedException 不支持的组播:组合两个非空委派失败时引发
  70. NotSupportedException 调用的方法在类中没有实现
  71. NullReferenceException 引用空引用对象时引发
  72. OutOfMemoryException 无法为新语句分配内存时引发,内存不足
  73. OverflowException 溢出
  74. StackOverflowException 栈溢出
  75. TypeInitializationException 错误的初始化类型:静态构造函数有问题时引发
  76. NotFiniteNumberException 无限大的值:数字不合法
  77. 四、定义自己的异常类
  78. 除了预定义的异常外,我们还可以创建自己的异常,过程比较简单:
  79. 一声明一个异常,格式如下:
  80. class ExceptionName:Exception{}
  81. 二引发自己的异常:
  82. throw(ExceptionName);
  83. 看一个例子:
  84. class IAmSecondGrade:System.Exception{}//声明异常
  85. class SecondGrade
  86. {
  87. public static int mul(int first,int second)
  88. {
  89. if(first>100||second>100)
  90. throw new IAmSecondGrade();//引发异常
  91. return (first*second);
  92. }
  93. public static void Main()
  94. {
  95. int mul_value;
  96. try
  97. {
  98. mul_value=mul(99,56);
  99. System.Console.WriteLine("99与56积为:{0}",mul_value);
  100. mul_value=mul(101,4);
  101. System.Console.WriteLine("出现异常,这行是不会被执行的。");
  102. }
  103. catch(IAmSecondGrade)//捕获自定义的异常
  104. {
  105. System.Console.WriteLine("我才上二年级,超过100的乘法我不会。嘿嘿,我自定义的异常。");
  106. }
  107. catch(System.Exception e)
  108. {
  109. System.Console.WriteLine("非自定义异常。其值为:{0}",e);
  110. }
  111. }
  112. }
时间: 2024-10-11 17:31:04

C#基础知识点之try catch 异常捕获机制的相关文章

异常捕获机制

在写代码的时候最怕代码写了几百上千行,可是一运行程序就崩溃:为了提高代码的健壮性,下面提供一种提高代码健壮性的方式: 异常捕获机制 1 // 异常捕获机制:提高代码的健壮性 2 @try---@catch---@finally 下面以一个打印数组的小Demo说明其用法 1 NSArray *arr = @[@10, @20, @30]; 2 @try { 3 /* 将有可能出问题导致程序崩溃的代码放在try语句体中 */ 4 NSLog(@"arr[3] = %@",arr[3]);

用c实现跨平台异常捕获机制

TBOX封装了一套跨平台的异常捕获实现,来模拟windows的seh异常处理功能,而且是线程安全的. 在linux/mac下的实现 使用signal 捕获异常信号 使用sigsetjmp保存现场寄存器和信号掩码,出现异常后使用 siglongjmp 跳转到异常处理过程,并恢复状态 使用线程局部存储维护 sigjmpbuf 寄存器现场状态堆栈,保证多线程安全,并且可以实现多层嵌套捕获处理. 在windows下的实现 这个就不用多说了,在vs下直接用 try.except 关键字就行了,如果在min

C#中的异常捕获机制(try catch finally)

一.C#的异常处理所用到关键字 try :用于检查发生的异常,并帮助发送任何可能的异常. catch :以控制权更大的方式处理错误,可以有多个catch子句.  finally: 无论是否引发了异常,finally的代码块都将被执行.  throw: 用于引发异常,可引发预定义异常和自定义异常. 二.C#异常处理的格式 1 try 2 { 3 //程序代码块: 4 } 5 catch(Exception e) 6 { 7 //异常处理代码块: 8 } 9 finally 10 { 11 //无论

TP5 try{}catch{}异常捕获不到 解决办法

问题:TP5用下面的方法, 想要获取抛出的异常捕获不到…… 错误的写法: try{ …… } catch (Exception $e) { echo $e->getMessage(); } 正确的写法: try{ …… } catch (\Exception $e) { echo $e->getMessage(); } 原文地址:https://www.cnblogs.com/pawn-i/p/11738460.html

try catch异常捕获

格式为: try            {                int i = int.Parse(Console.ReadLine());           //容易发生错误的语句                Console.WriteLine("你输入的没有错误");            }            catch (Exception e)            {                Console.WriteLine("你输入的格

Nodejs 入门基础知识点

? 1.nodejs的安装? 1.1 检测nodejs的版本 node -v (version:版本)? 1.2 path配置nodejs 的环境变量(当前版本都是自动安装配置环境变量)指令: path? 1.3 npm(node package mangment)node包管理工具node之前版本是和npm分开的,两个模块是分别安装的,现在把npm打包到了node安装程序里面2.什么是nodejs? ```nodejs是javascript的运行环境,是一个执行js文件的平台.nodejs存在

swift 异常捕获try catch的使用

新的异常捕获机制更新于 WWDC 2015上发布的新的Swift2.0,异常的try-catch机制有助于我们更快的定位出错原因所在,此处简单说明下try-catch机制的用法. 1.定义枚举异常值 首先我们可以创建自己的异常枚举值,这要实现ErrorType协议,只不过这个协议是空的,我们加上就好. 2.抛出异常 我们可以在方法中抛出异常,定义抛出异常的方法很简单,只需要在返回值的 -> 前面加上throws就好了,示例如下:(这个方法是自定义的Dog类里的一个实例方法,name.length

fastclick 源码注解及一些基础知识点

在移动端,网页上的点击穿透问题导致了非常糟糕的用户体验.那么该如何解决这个问题呢? 问题产生的原因 移动端浏览器的点击事件存在300ms的延迟执行,这个延迟是由于移动端需要通过在这个时间段用户是否两次触摸屏幕而触发放大屏幕的功能.那么由于click事件将延迟300ms的存在,开发者在页面上做一些交互的时候往往会导致点击穿透问题(可以能是层之间的,也可以是页面之间的). 解决问题 之前遇到这个问题的时候,有在网上看了一些关于解决移动端点击穿透的问题,也跟着网上提出的方式进行了各项测试,最终还是觉得

Servlet过滤器——异常捕获过滤器

1.概述 介绍如何实现异常捕获过滤器. 2.技术要点 本实例主要是在过滤器Filter的doFilter()方法中,对执行过滤器链的chain的doFilter()语句处添加try…catch异常捕获语句,然后在chach语句中,循环异常对象,直到找出根异常为止. 3.具体实现 (1)创建Filter实现类ExceptionFilter.java,利用throwable抛出异常,去捕捉异常原因并转到相应的页面中主要代码为: public class ExceptionFilter impleme