delphi程序设计基础教程 曹静 第7章 异常处理新_第1页
delphi程序设计基础教程 曹静 第7章 异常处理新_第2页
delphi程序设计基础教程 曹静 第7章 异常处理新_第3页
delphi程序设计基础教程 曹静 第7章 异常处理新_第4页
delphi程序设计基础教程 曹静 第7章 异常处理新_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

DELPHI程序设计基础教程 第七章 异常处理第七章 异常处理t 7.1 异常与 Delphi的异常类 t 7.2 异常保护和处理机制 t 7.3 异常处理应用 2018/8/82本章学习导读t 程序运行过程中,不可避免的会出现异常或错误,我们平时所使用的操作系统也经常会出现各种问题,因此在程序的开发中如何检测和处理程序的运行错误是一个关键问题。通过 Delphi的异常处理机制,可以捕获这些异常并进行处理。 Delphi全面支持异常处理,定义了大量的异常处理对象,使程序能够处理几乎所有的异常情况。t 本章首先介绍 Delphi中的异常种类,然后介绍异常保护和处理机制,最后给出一个应用程序中处理异常的实例,使大家能深入了解异常。2018/8/837.1 异常与 Delphi的异常类 t 异常处理机制建立在保护块的基础上,所谓保护块是指介于关键字 try和 end之间的一段代码,当保护块中的代码发生异常时自动创建一个相应的异常类,程序可以捕获并处理这个异常,以确保程序的正常结束以及资源的释放,若无法处理则会弹出一个消息框。t 异常类是 Delphi异常处理机制的核心,Delphi提供的所有异常类都从 Exception类继承, Exception类包含在 SysUtils单元中。2018/8/847.1 异常与 Delphi的异常类 t运行期间库异常类运行期间库异常类用于处理运行期间的一些异常,运行期间库异常可以分为 7类,它们都定义在 SysUtils单元中。( 1) I/O异常。 I/O异常 EInOutError是在程序运行中试图对文件或外部设备进行操作失败后产生的,它从 Exception派生后增加了一个公有数据成员 ErrorCode,用于保存所发生错误的代码。在发生异常时,通过访问该属性可以针对不同情况采取不同的对策。通过编译开关 $I可以指定是否使用 I/O异常类。当编译开关为 $I时,将在程序中使用 I/O异常类。当编译开关为 $I-时,不产生 I/O异常类,而是直接把错误代码返回到预定义变量 IOResult中。( 2)堆异常。堆异常是在动态内存分配中产生的,包括 2个类EOutOfMemory和 EInvalidPointer。( 3)整数异常。整数异常都是从 EIntError类派生的,但在程序运行中引发的总是它的子类: EDivByZero, ERangeError,EIntOverFlow。2018/8/857.1 异常与 Delphi的异常类 ( 4)浮点异常。浮点异常都是从 EMathError类派生,与整数异常相似,在程序运行中总是引发它的子类: EInvalidOp、EZeroDivide、 EOverFlow、 EUnderFlow。浮点异常是在进行实数操作时产生的 。( 5)类型匹配异常。当试图用 As操作符把一个对象强制匹配为另一类对象失败后,引发类型匹配异常 EInvalidCast。( 6)类型转换异常。当试图从一种数据类型转换为另一种数据类型时,如果不能直接转换则引发类型转换异常EConvertError。( 7)硬件异常。硬件异常在以下两种情况下发生:1、处理器检测到一个它不能处理的错误;2、程序产生一个中断企图中止程序的执行。2018/8/867.1 异常与 Delphi的异常类 t控件异常类在操作和使用控件的过程中,不可避免的会遇到控件异常。控件异常分为预定义异常和通用异常。 Delphi为某些特定的控件预定义了一些常见的异常情况,这类异常被称为预定义异常。所有控件都可能出现的异常被称为通用异常。( 1)预定义异常Delphi为许多控件都定义了异常类,下面介绍几个典型的预定义异常:1、 EMenuError2、 EInvalidGridOperation3、 EDatabaseError和 EReportError( 2)通用异常Delphi定义了许多通用异常,下面介绍几个常用的通用异常:1、 EInvalidOperation2、 EComponentError3、 EOutOfResource2018/8/877.1 异常与 Delphi的异常类 t其它组件异常其它组件异常是指除了控件以外的其它组件引发的异常,包括流异常、图形异常、打印异常和字符串链表异常等。( 1)流异常。流异常包括 EStreamError、 EFCreateError、EFOpenError、 EFileError、 EReadError、 EWriteError、EClassNotFound,流异常在 Classes库单元中定义( 2)图形异常。包括 EInvalidGraphic和EInvalidGraphicOperation两类,在 Graphic库单元中定义 ( 3)打印异常。当打印发生错误时(如向一个不存在的打印机发送打印任务)引发,它在 Printers库单元中定义。( 4)字符串链表异常。包括 EStringListError和 EListError两类,它们在用户对字符串链表进行非法操作时引发。由于许多控件(如 ListBox、 Memo)都有一个 TStrings类的重要属性,因此字符串链表异常在编程中非常有用 2018/8/887.2 异常保护和处理机制通常为容易出现错误的代码添加保护,将代码块放入 try语句之后实施保护,异常处理通常有两种结构: tryexceptend 和tryfinallyend 。前者为开发者提供了一个按自己的需要进行异常处理的机制;后者与资源有关,确保异常发生后资源能够正常释放。1使用 tryexceptend 处理异常try要进行保护的代码,这些代码很容易出现异常 excepton exception1 do 处理 exception1的语句 on exception2 do处理 exception2的语句 else 提供默认响应 /else语句放在 中表明 else语句可有可无end;try和 except之间的语句是希望正常执行的代码,在执行过程中如果出现了异常,则程序跳入 except部分执行。值得注意的是:正常情况下, except之后的语句是不执行的,只有在出现异常的情况下才会执行。 2018/8/897.2 异常保护和处理机制使用 tryfinallyend 处理异常tryfinallyend 主要用于在发生异常的情况下,及时释放程序所占用的资源,如内存、文件等等。因为整个系统的资源总是有限的,程序必须在运行结束后及时释放所占用的资源,才能保证系统的正常运行。tryfinally end 结构语法如下:try要进行保护的代码,这些代码很容易出现异常 finally不管是否发生异常都必须执行的代码,一般用来释放资源 end;2018/8/8107.3 异常处理应用下面通过一个具体的应用演示异常处理的应用,在这个例子中定义了一个 InValidateID类,当用户名不正确时引发该异常。( 1)新建一个 Application;( 2)向窗体 Form1中添加一个 Label组件,将其 Caption属性设置为 “ 应用程序主窗口 ” ;( 3)单击 “ 文件 |新建 |窗体 ” ,创建一个新窗体,用于登陆时验证,添加两个 Label组件,分别将其Caption属性设置为 “ 用户名 ” 、 “ 密码 ” ( 4)放置两个 Edit组件到窗体上,将其 Text属性清空,将密码文本框的 Passwordchar属性设置为 “*”( 5)放置两个按钮到窗体上,将其 Caption属性分别设置为 “ 登陆 ” 和 “ 取消 ” 。( 6)选中 Form1窗体,单击 “ 文件 |使用单元 ” ,出现 “ Use Unit” 对话框,选中 Unit2单击 “ OK” 按钮,添加 Unit2的引用。( 7)选中 Form1,在对象检视器中打开 “ Events” 选项卡,选中 OnShow事件,出现一个下拉列表框,双击下拉列表框,输入如下代码:if Form2.ShowModal=mrCancel thenCloseelseForm2.Close;( 8)选中 Form2窗体,按下 “ F12” ,打开代码编辑,在 “ var” 语句之前添加如下代码:typeEInValidateID=class(Exception)publicconstructor Create(msg:String);end;2018/8/8117.3 异常处理应用( 9)在 “ implementation” 之后添加如下代码:constructor EInValidateID.Create(msg:String);begininherited Create(msg);end;( 10)双击 “ 登陆 ” 按钮,输入如下代码:if Edit1.Texthigh(User) thenRaise EInValidateID.Create;if Edit2.TextPassi thenRaise EInValidatePassword.Create;ModalResult:=mrOK;end;( 11)双击 “ 取消 ” 按钮,输入如下代码:ModalResult:=mrCancel;( 12)运行程序,输入用户名 “ zhang” 、密码 “ 111” 或者用户名 “ li” 、密码 “ 222” 或者用户名 “ wang”、密码 “ 333” 时出现主程序界面。2018/8/814本章小结t 开发健壮的程序是开发人员所追求的目标,这就需要考虑到多种可能引发异常的情况,适时的抛出异常,或者使用自定义异常。本章介绍了 Delphi中的异常种类,并给出了自定义异常的使用方法,通过 Delphi完善的异常处理机制能够处理大部分异常。2018/8/815在线教务辅导网: 更多课程配套课件资源请访问在线教务辅导网2018/8/816Date17DELPHI程序设计基础教程Date18DELPHI程序设计基础教程Date19DELPHI程序设计基础教程Da

温馨提示

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

评论

0/150

提交评论