第8讲CCsharp培训课件_第1页
第8讲CCsharp培训课件_第2页
第8讲CCsharp培训课件_第3页
第8讲CCsharp培训课件_第4页
第8讲CCsharp培训课件_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

异常处理 异常 Exception 是运行时产生的错误 使用C 的异常处理子系统 我们能够以标准化可控制的方式来处理运行时错误 异常处理可以说是对不正常情况的处理 包括发生错误时的处理 异常处理通过允许程序定义代码块来简化错误处理 此代码块称为异常处理程序 出现错误时自动执行它 System Exception类 在C 中 异常用类来表示 所有异常类都必须从内部异常类Exception派生而来的 而Exception是System名字空间的一部分 因此所有异常都是Exception的子类 在C 中有两类常规异常 C 运行时系统 CLR 产生的异常 SystemException 以及应用程序产生的异常 ApplicationException System OutOfMemoryException当试图通过new来分配内存而失败时抛出 System IndexOutOfRangeException当试图通过一个比零小或者超出数组边界的标签来索引一个数组时抛出 DivideByZeroException当试图用整数类型数据除以零时抛出 System NullReferenceException试图对空引用进行操作 也就是说引用没有指向对象时抛出 OverflowException 当一个算术操作溢出时抛出 C 中定义的常用标准异常都是从SystemException派生而来的 例如 异常怎样被处理 C 中异常处理由4个关键字来管理 try catch throw和finally 工作方式如下 要监视是否产生异常的程序语句包含在try模块中 如果try模块内产生异常 那么系统自动抛出此异常 同时也可以手动用 throw 抛出异常 然后使用catch捕捉此异常 并以合理的方式处理它 异常处理语法 try suspectcode catch handleexceptions Demonstrateexceptionhandling usingSystem classExcDemo1 publicstaticvoidMain int nums newint 4 try Console WriteLine Beforeexceptionisgenerated Generateanindexout of boundsexception for inti 0 i 10 i nums i i Console WriteLine nums 0 1 i nums i Console WriteLine thiswon tbedisplayed catch IndexOutOfRangeException catchtheexceptionConsole WriteLine Indexout of bounds Console WriteLine Aftercatchstatement 输出结果 Beforeexceptionisgenerated nums 0 0nums 1 1nums 2 2nums 3 3Indexout of bounds Aftercatchstatement 请注意 catch子句中不指定参数 只有需要访问异常对象时才需要参数 在某些情况下 异常处理程序能够使用异常对象的值来获得此错误的附加信息 Message 获取描述当前异常的消息 Source获取或设置导致错误的应用程序或对象的名称 ToString 创建并返回当前异常的字符串表示形式 usingSystem classExceptionTest publicstaticvoidMain string args inta 30 intb 0 intc 0 try c a b catch DivideByZeroExceptione Console WriteLine e Message e Message Console WriteLine e Source e Source Console WriteLine e ToString e ToString return Console WriteLine a 0 b 1 a b 2 a b c 输出结果 e Message 试图除以零 e Source ConsoleApplication8e ToString System DivideByZeroException 试图除以零 atExceptionTest Main String args inc documentsandsettings whtc mydocuments visualstudioprojects consoleapplication8 consoleapplication8 class1 cs line11 异常允许合理处理错误 异常处理的关键优点之一是 它允许程序响应错误并继续运行 例如 下列数组的一个元素除以另一个元素 如果出现除数为0的情况 那么产生DivideByZeroException异常 在此程序中 此异常的处理是报告错误消息并继续执行 usingSystem classExcDemo3 publicstaticvoidMain int numer 4 8 16 32 64 128 int denom 2 0 4 4 0 8 for inti 0 i numer Length i try Console WriteLine numer i denom i is numer i denom i catch DivideByZeroException catchtheexceptionConsole WriteLine Can tdividebyZero 输出结果 4 2is2Can tdividebyZero 16 4is432 4is8Can tdividebyZero 128 8is16请注意 异常被处理后就从系统删除 使用多个catch语句 可以有多个语句与同一个try模块相关联 每一个catch语句必须捕捉不同类型的异常 异常处理的顺序是至关重要的 例如 Sytem DivideByZeroException派生自System ArthmeticException 如果试图在捕获DivideByZeroException之前捕获ArthmeticException 那么程序将永远捕获不到DivideByZeroException 因为DivideByZeroException是ArthmeticException类型 也就是说它派生自ArthmeticException Usemultiplecatchstatements usingSystem classExcDemo4 publicstaticvoidMain Here numerislongerthandenom int numer 4 8 16 32 64 128 256 512 int denom 2 0 4 4 0 8 for inti 0 i numer Length i try Console WriteLine numer i denom i is numer i denom i catch DivideByZeroException catchtheexceptionConsole WriteLine Can tdividebyZero catch IndexOutOfRangeException catchtheexceptionConsole WriteLine Nomatchingelementfound 输出结果 4 2is2Can tdividebyZero 16 4is432 4is8Can tdividebyZero 128 8is16Nomatchingelementfound Nomatchingelementfound 捕捉所有异常 有时我们想要捕捉所有异常 而不管其类型 此时使用没有参数的catch语句 usingSystem classExcDemo5 publicstaticvoidMain int numer 4 8 16 32 64 128 256 512 int denom 2 0 4 4 0 8 for inti 0 i numer Length i try Console WriteLine numer i denom i is numer i denom i catch Console WriteLine Someexceptionoccurred 输出结果如下 4 2is2Someexceptionoccurred 16 4is432 4is8Someexceptionoccurred 128 8is16Someexceptionoccurred Someexceptionoccurred throw抛出异常 前面的示例捕捉C 自动产生的异常 但是通过使用throw语句能够手动抛出 产生 异常 usingSystem classThrowDemo publicstaticvoidMain try Console WriteLine Beforethrow thrownewDivideByZeroException catch DivideByZeroException catchtheexceptionConsole WriteLine Exceptioncaught Console WriteLine Aftertry catchblock 输出结果 Beforethrow Exceptioncaught Aftertry catchblock finally语句 有时我们想要定义离开try catch模块时必须执行的代码块 可以用finally语句 try suspectcode catch handleexceptions finally alwaysdothis try模块不论是正常结束还是产生异常而结束 最后执行的代码是fnally模块中定义的代码 示例六 usingSystem classFinally publicstaticvoidMain string args inta 30 intb 0 intc 0 try c a b catch DivideByZeroExceptione Console WriteLine 除以0所产生的异常 e Message return finally Console WriteLine a 0 b 1 c 2 a b c 输出结果 除以0所产生的异常 试图除以零 a 30b 0c 0 自定义异常类 创建异常的过程很简单 只要定义一个从ApplicationException派生的类即可 usingSystem publicclassMyException ApplicationException privatestaticstringmyMessage 自定义异常类MyException publicMyException base myMessage publicMyException stringmsg base msg cl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论