C#程序设计 第2章C#语言基础
C# 程序设计 第2章 C#语言基础
学习目的与要求: 了解什么是异常,以及C的异常处理机制 咒了解C#常用的异常类 掌握try、catch和finally关键字处理异常 掌握throw:关键字抛出异常 掌握自定义异常 2
2 了解什么是异常,以及C#的异常处理机制 了解C#常用的异常类 掌握try、catch和finally关键字处理异常 掌握throw关键字抛出异常 掌握自定义异常 学习目的与要求:
什么是异常 异常处理的方法 抛出异常 自定义异常
3 什么是异常 异常处理的方法 抛出异常 自定义异常 ★
为什么要异常处理 C:\Windows\system32\cmd.exe int a,b; 情输入被除数:a 未经处理的异常:System.FormatException:输入字符串的格式不正确。 Console.Write("请输入被除数:")i a int.Parse(Console.ReadLine ()) Console.Write("请输入除数:")i b int.Parse(Console.ReadLine ()) int c; c=a/bi Console.WriteLine("O}/1=2}",a,b,c); 4
4 为什么要异常处理 int a, b; Console.Write("请输入被除数:"); a = int.Parse(Console.ReadLine ()); Console.Write("请输入除数:"); b = int.Parse(Console.ReadLine ()); int c; c = a / b; Console.WriteLine("{0}/{1}={2}",a,b,c);
处理C#中的异常 异常:程序 在C#中,当出现某种异常时,就会创建一个异常对象 常见的异常 ·文件找不 Object ▣文件操作, Exception ■网络无法 SystemException ApplicationException 数组越界 从此处派生出 自己的异常类 ■算术除0 ArgumentException ArithmeticException lOException Argument NullException FileLoadException ArgumentoutofRangeException FileNotFoundException UnauthorizedAccessException StackoverflowException EndofStreamException OverflowException
5 处理C#中的异常 ▪ 异常:程序在执行过程中发生的错误。 ▪ 常见的异常 ◼ 文件找不到 ◼ 文件操作权限不足 ◼ 网络无法连接 ◼ 数组越界 ◼ 算术除0 在C#中,当出现某种异常时,就会创建一个异常对象
ArgumentException 参数错误:方法的参数无效 ArgumentNullException 数为空:给方法传递一个不可接受的空参 数 ArithmeticException 数学计算错误:由于数学运算导致的异常, 覆盖面广 DivideByZeroException 被0除 FormatException 参数的格式不正确 IndexOutOfRangeException 索引超出范围,小于0或比最后一个元素索引 大 NullReferenceException 引用为null的对象 StackOverflowException 堆栈已满 OverflowException 溢出 OutOfMemoryException 无法为新语句分配内存时引发异常,内存不 足 InvalidCastException 非法强制转换,显示转换失败时引发 EndOfStreamException 读到文件末尾而引发的。 6
6 ArgumentException 参数错误:方法的参数无效 ArgumentNullException 参数为空:给方法传递一个不可接受的空参 数 ArithmeticException 数学计算错误:由于数学运算导致的异常, 覆盖面广 DivideByZeroException 被0除 FormatException 参数的格式不正确 IndexOutOfRangeException 索引超出范围,小于0或比最后一个元素索引 大 NullReferenceException 引用为null的对象 StackOverflowException 堆栈已满 OverflowException 溢出 OutOfMemoryException 无法为新语句分配内存时引发异常,内存不 足 InvalidCastException 非法强制转换,显示转换失败时引发 EndOfStreamException 读到文件末尾而引发的
什么是异常 异常处理的方法 抛出异常 自定义异常
7 什么是异常 异常处理的方法 抛出异常 自定义异常 ★
异学M迅 形式四:多catchi配finally 异常处理:在运行时 try 山《曰出L▣” 待监测代码,此段代码若出现异常, 形式三:单catch配finally 则程序流程转到catch分支 形式五:无catch tionTyp1 e) try 码 待监测代码,此段代码若出现异常, I/则程序流程转到外层catch分支 tionTyp2e) 码 finally 川善后处理代码,无论是否出异常都会执 行,即使catch块有return也是如此 码,无论是否出异常都会执 ch块有return也是如此 8
8 异常处理 ▪ 异常处理:在运行时跟踪这些异常,并编写代码控制结果 被称为“异常处理”。 ▪ 异常处理的形式 形式一:单catch分支 try { //待监测代码,此段代码若出现异常, //则程序流程转到catch分支 } catch(Exception e) { //异常处理代码 } 形式二:多catch分支 try { //待监测代码,此段代码若出现异常, //则程序流程转到catch分支 } catch(ExceptionType1 e) { //异常处理代码 } catch(ExceptionType2 e) { //异常处理代码 } 形式三:单catch配finally try { //待监测代码,此段代码若出现异常, //则程序流程转到catch分支 } catch(Exception e) { //异常处理代码 } finally { //善后处理代码,无论是否出异常都会执 行,即使catch块有return也是如此 } 形式四:多catch配finally try { //待监测代码,此段代码若出现异常, //则程序流程转到catch分支 } catch(ExceptionTyp1 e) { //异常处理代码 } catch(ExceptionTyp2 e) { //异常处理代码 } finally { //善后处理代码,无论是否出异常都会执 行,即使catch块有return也是如此 } 形式五:无catch try { //待监测代码,此段代码若出现异常, //则程序流程转到外层catch分支 } finally { //善后处理代码,无论是否出异常都会执 行,即使catch块有return也是如此 }
异常处理 ty块包含的代码组成了程序的正常操作部分,但可能遇到 某些严重的错误情况。 catch:块包含的代码处理各种错误情况,这些错误是ty块中 的代码执行时遇到的。 finally块包含的代码清理资源或执行要在try块或catch块末尾 执行的其他操作。控制总是传递给finally块,与try块的退 出方式无关。 try只有1个;finally只有1个或0个 catch可以有0个(必须有一个finally),可以有多个 引出e.message-与e.tostring0 9
9 异常处理 try块包含的代码组成了程序的正常操作部分,但可能遇到 某些严重的错误情况。 catch块包含的代码处理各种错误情况,这些错误是try块中 的代码执行时遇到的。 finally块包含的代码清理资源或执行要在try块或catch块末尾 执行的其他操作。控制总是传递给finally 块,与 try 块的退 出方式无关。 引出e.message与e.tostring() try只有1个;finally 只有1个或0个 catch 可以有0个(必须有一个finally),可以有多个
异常处理 在catch多分支中需要注意各异常类型的顺序: 先具体化异常,再一般性异常。 catch:块中有application.exit0或enviroment.exit(O)语句时, finally块不会执行 catch块后没有参数时可以处理所有异常,包括exception及 其它语言发生的异常。 引出e.message-与e.tostring0 10
10 异常处理 在catch多分支中需要注意各异常类型的顺序: 先具体化异常,再一般性异常。 catch块中有application.exit()或enviroment.exit(0)语句时, finally块不会执行 catch块后没有参数时可以处理所有异常,包括exception及 其它语言发生的异常。 引出e.message与e.tostring()