C#-程序设计教程第7章.ppt
《C#-程序设计教程第7章.ppt》由会员分享,可在线阅读,更多相关《C#-程序设计教程第7章.ppt(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第7 7章章 程序的生成、异常处理和调试程序的生成、异常处理和调试 7.1 异常处理7.1.1 7.1.1 异常类异常类7.1.2 try-catch7.1.2 try-catch7.1.3 try-catch-finally7.1.3 try-catch-finally7.1.4 7.1.4 多重多重trytry结构结构7.1.5 7.1.5 默认异常处理默认异常处理7.1.6 7.1.6 throwthrow7.1.7 7.1.7 用户自定义异常用户自定义异常7.2 Visual Studio 2017的调试功能目目 录录7.1.1 异常类 专业的程序必须能够处理异常情况。在.NET以前
2、的编程语言中,这常常称作错误处理。意外的情况会生成错误代码,程序捕捉这段代码并采取相应的措施。.NET的公共语言运行库并不产生错误代码。在出现异常情况时,CLR创建一个称作异常的特殊对象,该对象中的属性和方法详细描述了异常情况以及引起错误的具体原因。.NET处理的是异常而不是错误,因此在.NET中不再使用术语“错误处理”,改用“异常处理”。异常处理指的是发现异常时采取相应措施的.NET技术。.NET实现了系统范围内功能强大的错误处理方式,.NET中不再使用错误符号,而使用异常对象。异常对象是一个包含错误相关信息的对象,这些信息显示为该对象的属性。异常对象是派生于System.Exception
3、类的一个实例,System.Exception类有许多子类用于不同的异常情况。7.1 7.1 异常处理异常处理7.1.1 异常类 在C#语言中使用异常类和异常处理需要用到几个关键字,它们是:try:开始一段可能出现错误的代码。这段代码常常称为 try块。catch:为一种类型的异常开始一个错误处理程序。catch跟在try块的后面,try结构可以有多个catch块,每个catch块都捕获不同类型的异常。在try块中遇到错误时,开始执行第一个与异常类型匹配的catch块。finally:包含在try块正常结束时执行的代码,或者catch块执行完毕后执行的代码。也就是说,无论是否检测到异常,fin
4、ally块中的代码总是会执行。finally块一般用于关闭或删除资源,例如数据库连接,如果没有清理这类资源,代码就会出问题。throw:生成一个错误,在catch块中可以用它把异常送回给调用例程,如果某个例程检测到传入参数类型错误,也可以用它抛出异常。7.1 7.1 异常处理异常处理7.1.2 try-catch try-catch 语句由一个 try 块后跟一个或多个 catch 子句构成,这些子句指定不同的异常处理程序。引发异常时,公共语言运行时(CLR)会查找处理此异常的 catch 语句。如果当前执行的方法不包含这样的 catch 块,则 CLR 会查看调用当前方法的方法,然后会遍历调
5、用堆栈。如果找不到 catch 块,则 CLR 会向用户显示一条有关未处理异常的消息并停止执行程序。7.1 7.1 异常处理异常处理7.1.2 try-catch 虽然可以使用不带参数的 catch 子句捕捉任何类型的异常,但不推荐这种用法。通常,应该只捕捉那些知道如何从中恢复的异常。因此,应该总是指定一个从 System.Exception 派生的对象参数。例如:catch(InvalidCastException e)7.1 7.1 异常处理异常处理7.1.2 try-catch 在同一个 try-catch 语句中可以使用一个以上的特定 catch 子句。这种情况下 catch 子句的顺
6、序很重要,因为会按顺序检查 catch 子句。将先捕获特定程度较高的异常,而不是特定程度较小的异常。如果对 catch 块进行排序以使永远不能达到后面的块,编译器将产生错误。例7-27.1 7.1 异常处理异常处理7.1.2 try-catch在 catch 块中可以使用 throw 语句再次引发已由 catch 语句捕获的异常。例如:catch(InvalidCastException e)throw(e);/再次引发已由 catch 语句捕获的异常同时也可以引发新的异常。下面的例子中将捕捉的异常指定为内部异常:catch(InvalidCastException e)/引发自定义的新异常
7、throw new CustomException(Error message here.,e);如果要再次引发当前由无参数的 catch 子句处理的异常,则使用不带参数的 throw 语句。例如:catch throw;7.1 7.1 异常处理异常处理7.1.2 try-catch 在 try 块内部时应该只初始化其中声明的变量;否则,完成该块的执行前可能发生异常。例如,在下面的代码示例中,变量 x 在 try 块内初始化。试图在 Write(x)语句中的 try 块外部使用此变量时将产生编译器错误:使用了未赋值的局部变量。7.1 7.1 异常处理异常处理7.1.2 try-catchsta
8、tic void Main()int x;try /不能在此处初始化声明的变量 x=123;catch /此处可能会引发异常:使用了未赋值的局部变量 Console.Write(x);7.1 7.1 异常处理异常处理7.1.3 try-catch-finally finally 块用于清除 try 块中分配的任何资源,以及运行任何即使在发生异常时也必须执行的代码。控制总是传递给 finally 块,与 try 块的退出方式无关。catch 用于处理语句块中出现的异常,而 finally 用于保证代码语句块的执行,与前面的 try 块的退出方式无关。finally 块中的语句不管异常是否触发都会
9、被执行。catch 和 finally 一起使用的常见方式是:在 try 块中获取并使用资源,在 catch 块中处理异常情况,并在 finally 块中释放资源。7.1 7.1 异常处理异常处理7.1.3 try-catch-finally 例7-3演示了一个典型的使用try-catch-finally结构的情景,在try块中占用了一个对文件object类型的变量o拆箱并引发一个IOException异常,在catch块中对异常进行捕获但不做任何处理,在finally块中输出i。finally块保证了不管程序运行过程中是否产生异常都能正确释放程序运行时所占用的系统资源。7.1 7.1 异常处
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 教程
限制150内