ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:21.06KB ,
资源ID:9802117      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9802117.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Delphi异常处理详解全.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Delphi异常处理详解全.docx

1、Delphi异常处理详解全Delphi_异常处理 _详解 (全 .txtDelphi 异常处理 详解1 Exception类的定义在 SysUtils 单元中。2 Delphi也支持不从 Exception 继承的异常类,但是我觉得这么做并不十分的明智。一、异常的来源在 Delphi 的应用程序中,下列的情况都比较有可能产生异常。(1文件处理(2内存分配(3 Windows 资源(4运行时创建对象和窗体(5硬件和操作系统冲突二、异常的处理(1 t ryexceptend;在 try 体内的代码发生异常时,系统将转向 except 部分进行异常的处理。这是 Delphi 处理异常的最基本的方式之

2、一。(2 tryfinallyend;这种异常处理结构一般用于保护 Windows 的资源分配等方面, 它确保了无论 try 体内的 代码是否发生异常,都需要由系统进行最后的统一处理的一些 Windows 对象的正确处理。 和 tryexceptend 不同,该结构的 finally 部分总被执行。(3不存在 tryexceptfinallyend 结构来既处理异常,又保护资源分配的结构,但 是, tryexceptend 结构允许嵌套到 tryfinallyend 结构中,从而实现既处理异常,又 保护资源的分配。三、异常的精确处理(1定义一个异常。在 Delphi 中,每个异常都是 Exce

3、ption1类的一个派生类 2。因此,定义一个异常就是 定义一个 Exception 类的派生类。type EMyException = class(Exception;当然,基类可以是 Exception 或者 Exception 的任何一个任何层次的派生类。(2在程序中抛出一个异常。根据不同的情况抛出异常是使用异常的最基本的模式。在 Delphi 中,由 raise 语句来实 现。【语法】 raise 异常类 .Create( 异常的缺省说明 ;(3在 tryexceptend 中更加精确的捕捉异常。使用 on E:异常类 do 结构可以在 do 体内处理特定异常类所抛出的异常。四、异常的

4、调试在 Delphi IDE中,解除 “Debugger Options” (可以使用菜单 Tools Debugger Options 进行访问中的 Integrated Debugging复选框的勾选状态可以进行异常的调试。五、异常的补充说明(1每一段程序都有可能产生错误!这是软件业的一个不容置疑的现象和规律。事实 上, 传统的 ifelse 结构完全可以解决所有的错误, 使用 Exception 机制也没能够回避在最 原始的层次,通过遍历可能的情况来产生异常的做法,那么,为什么还要异常机制?答案很清楚:异常提供了一种更加灵活和开放的方式, 使得后来的编程者可以来根据实 际的情况处理这种错

5、误,而不是使用预先设定好的处理结果。Delphi7异常处理了解什么是异常和 Delphi7中提供的异常类掌握 Delphi7环境下自定义异常的方法和异常处理的语法结构与实现异常什么是异常程序开发过程中 , 有编译期错误和运行期错误 , 编译期错误很容易发现 , 而运行期错误 (逻辑错 误和异常 往往很难预料 . 为了程序的稳定性和可靠性 , 就需要对程序异常处理和保护 .异常 :理解为一种特殊的事件 , 该事件发生时 , 程序的正常执行将被打断 .由程序导致的不正常情况是错误而不是异常 , 程序错误与异常不是相同的概念 .异常是为方便用户报告错误并处理错误而创建的机制 , 一般是由操作系统完成

6、的 .运行期错误处理软件开发过程中 , 程序员必须提供适度的方式来处理不可避免的错误 . 一般方法如下 :1 传统方法2 使用异常进行错误处理传统方法在 Pascal 早期版本中 , 程序员必须借助编译器开关和状态变量去检测和处理存在的错误 .$I-此编译器指令关闭 I/O检测 Assign(InFile,InputName;Reset(InFile;$I+此编译器指令恢复 I/O检测 If IOResult0 then错误处理代码 ;使用异常进行错误处理结构化异常处理是 Delphi 语言内建的特性 . 为我们处理异常提供了方便 . 处理异常有两方面 :1 异常处理可确保适当地恢复在应用程序

7、中分配或改变的任何资源 .2 结构化异常处理为开发人员提供了一种一致的处理各种类型运行期错误的方式Delphi7异常处理机制异常处理的基本思想是通过提供规范方式处理软 , 硬件错误的能力 , 使程序更加健壮 .异常处理可以将处理错误的代码与正常的逻辑处理代码相分离 .Delphi 缺省的方式是在应用程序收到异常之前捕获异常 .IDE 会给出一个 ” 预警 ” 对话框 , 以指 明应用程序将要产生异常 .异常处理机制是一种程序设计安全策略 , 它是建立在保护块思想上 , 通过 try 和 end 语句块对 代码的封装确保在程序发生异常时 , 程序能够正常运行或释放所占用的资源 .Delphi7异

8、常处理机制传统程序设计中 , 用如下的伪代码方法来检查和处理程序错误 :执行一个任务If 前一个任务未能正确执行执行错误处理执行下一个任务If 前一个任务未能正确执行执行错误处理Delphi7异常处理机制例 ;tryAge := StrToInt(Edit1.Text;ShowMessage(Format(生于 %d年 , YearOf(Now - Age;excepton EConvertError doshowmessage(输入编辑框的不是一个有效的数字 !;on ERangeError doshowmessage(输入编辑框的年龄值太大 !;end; 异常类Delphi7根据异常类型定

9、义了相应的异常类 . 所有异常类的基类都是 Exception 类 .Delphi7内置了大量的异常类 , 用户也可以通过 Exception 类自定义异常类 .记住异常类的要点 :1 异常类是响应不同异常现象的入口 .2 熟悉异常类的层次结构 .Exception 异常类Exception 是所有异常类的基类 , 它并不是以 T 开头 , 而是以 E 开头 , 它的派生类也是以 E 开头 的 .Exception 类定义于 SysUtils 单元中 .Exception 类最常用的方法是 Create 方法 :Constructor Create(const Msg:string;Excep

10、tion.Create( 我自己创建的异常 !;该方法用于创建一个异常类的实例 , 也可以显示错误信息 , 也可直接用这个方法提交一个异常 raise Exception.Create( 我抛出的异常 !;例 :tryraise Exception.Create(我抛出的异常 !;excepton E: Exception doshowmessage(异常类名称 : + E.ClassName+ #13#10 + 异常信息 : + E.Message;end;Delphi7内置的异常类Delphi7根据异常现象的类型定义了相应的异常类 , 这些异常类又称为 Delphi7内置的异常类 . 具体

11、分为运行时库异常类 , 对象异常类和组件异常类三大类 .运行时库异常类 (RTL运行时库异常类可分为以下几种 :1 整数计算异常 2 浮点计算异常 3 硬件异常 4 堆异常 5 输入输出异常 (I/O异常 6 字符 转换异常 7 类型转换异常 8 哑异常整数计算异常EIntError 整数计算异常 (基类 EDivByZero 整数除 0溢处EIntOverFlow 整数溢出ERangeError 整数越界浮点计算异常EMathError 浮点计算异常 (基类 EInvalidOp 无效浮点操作指令Eoverflow 浮点操作上溢Eunderflow 浮点操作下溢EZeroDivide 浮点计

12、算除 0硬件异常EProcessorException 硬件异常 (基类 ESingleStep 应用程序产生单步中断Ebreakpoint 应用程序产生断点中断Efault 故障 (继承 EProcessorException, 也是基类 EStackFault 对处理器栈段的非法访问EPageFault 内存管理器无法正确使用交换文件 EGPFault 保护性错误 , 一般由未初始化指针或对象造成 EInvalidOpCode 处理器遇到未定义指令堆异常和 (I/O异常 堆异常 :EOutOfMemory 堆中没有足够的内存完成操作 EInvalidPointer 试图访问一个堆外的指针(

13、I/O异常 EInOutError DOS输入 /输出错误字符转换 /类型转换异常和哑异常字符转换异常EConvertError 数字到字符串或字符串到数字转换错误类型转换异常EInvalidCast 类型转换异常哑异常EAbort 调用 Abort 产生 , 不显示错误提示框对象异常类对象异常类是针对非组件对象引发的异常而定义的 . 对象异常类包括 :1 流异常类2 打印异常类3 图形异常类4 字符串链表异常类流异常类 流异常是指在程序中进行与流相关的操作时产生的异常.流异常类的基类是 EStreamError,其 他流异常类都直接或间接从它派生. 派生关系见书 48 页图 打印异常 打印异

14、常是由于应用程序向不存在的打印机发送打印命令或由于某种原因打印工作无法送 到打印机时引发的. 打印异常类为 Eprinter,定义于 Printers 单元 图形异常 图形异常主要包括 EInvalidGraphic 和 EInvalidGraphicOperation 两个类均定义于 Graphics 单元 EInvalidGraphic 异常满足下列情况之一时引发: 当应用程序试图向一个并不包含合法的位图,图象,元文件或用户自定义图形类型的文件中装 入图象时. 当应用程序试图装入不可识别扩展名的文件时 当图象与 LoadFromClipboardFormat 或 SaveToClipboa

15、rdFormat 中的格式不匹配时. 当应用程序试图将图象的 PixelFormat 设为不支持的值 EInvalidGraphicOperation 异常在满足下列条件之一时发生: 应用程序访问图象中不存在的扫描线时. 应用程序不能成功写入图象时. 应用程序在画布未处于有效状态时进行绘制. 应用程序装入未知或不支持的图象格式时. 应用程序将图象的 PixelFormat 设为不支持的值时 不能分配该操作的句柄时. 字符串链表异常 字符串链表异常是由于用户对字符串链表进行非法操作时引发的. 包括 EStringListError,EListError 等.由于许多部件都有一个 Tstrings

16、 抽象类的属性(如 Tiistbox 组件的 Items 属性等,因而字符串链表异常在组件编程中很重要. EStringListError 一般在字符串链表越界时产生.而 EListError 异常通常在以下情况下发生: 当索引项超出链表范围时 当字符串链表的 Duplicates 属性设置为 dupError 同时应用程序试图加入一个重复的字符串时. 当向已排序的字符串链表中插入字符串时. 组件异常类 组件异常类用于响应组件异常,组件异常是由于对 VCL 组件进行操作时,违反了组件的使用 规则及其特征而引发的,可分为两大类: 通用组件异常、专用组件异常、通用组件异常。 常见的有非法操作异常,

17、组件异常和资源不足异常三种类型,对应于 EInvalidOpetation,EComponentError 和 EOutOfResource 异常类. 引发非法操作异常的原因有: 应用程序试图对 Parent 属性为 nil 的组件进行一些需要窗口句柄的操作. 试图对窗体拖放操作. 引发组件异常的原因有: Delphi 不能注册某个组件 应用程序不能重命名某个组件 资源不足异常被引发是由于当应用程序试图创建窗口句柄而操作系统没有多余的句柄可分 配 专用组件异常:许多组件都定义了相应的组件异常类. 列出几个典型的组件异常类: EMenuError 异常,菜单异常,是由于程序对菜单的非法操作而引发

18、的.定义于 Memus 单元 EInvalidGridOperation 异常.非法的网格操作,如试图引用一个不存在的网格单元时引发.定义 于 Grids 单元 EDatabaseError 异常.数据库异常是由于对数据库的非法操作引起的. 用户自定义异常类 创建用户自定义异常类的方法 抛出自定义异常 用户自定义异常类与内置异常类的区别 异常类对象与其他类对象的区别 创建用户自定义异常类的方法 选择 Exception 作为基类,按照定义类的一般方法,建立自定义的异常类就可以了. 如: type EMyException = class(Exception /需要定义属性或方法时,写在此处即可

19、 end;抛出自定义异常 Delphi 不会管理用户自定义异常的抛出,程序员必须自己抛出自己创建的异常.用 raise 语句可 抛出异常: raise EMyException.Create(My Exception;用户自定义异常类与内置异常类的区别 Delphi 不会自动响应用户自定义的异常类,所以用户自定义的异常类需要使用 raise 语句抛出, 而内置异常类与运行期真实的异常现象相对应,当异常发生时,操作系统会捕捉到此异常,通 知 Delphi 去响应. 异常类对象与其他类对象的区别 异常类对象创建后,不需要由用户释放它,当异常处理之后,系统会自动调用析构函数释放异 常类对象.而其他类

20、需要由用户来释放. Delphi7 的异常处理结构 tryfinally 语句块 Tryexcept 语句块 使用 raise 抛出异常 tryfinally 语句块 tryfinally 语句块是用于资源保护和恢复系统状态,不管 try 部分的操作是否有异常发 生,finally 部分的操作都要进行. 语法如下: try 被保护语句 finally 处理语句(无论异常是否发生,都必须处理 end;tryfinally 语句块主要用于资源保护 应用程序向系统申请了资源(如内存,图形句柄,当不需要这些资源时,就应该及时释放资源. 句柄:系统资源是有限的,一般构成一个资源链,链的长度是有限的,当系

21、统给应用程序分配资 源时,给每个资源设置一个 ID 号,这个 ID 号就是句柄.(系统资源相当于一个个房间,而句柄就 相当于房间号. 句柄有限:1 资源是有限的;2 数字表达的范围也是有限的(整数有范围的 Tryexcept 语句块 Tryexcept 语句块用于运行期错误处理,程序员可以用它编写对不同类型异常的处理. 异常发生后,判断异常的类型,正确处理异常. Tryexcept 语句块一般和 OnDo 子句连用; 语法如下: function Test(x, y: Real: Real; begin try Result := x / y;/被保护语句 except on EInvalid

22、Op do Result := 0;/异常处理语句 on EZeroDivide do Result := 0; on EOverFlow do Result := 0; on EUnderFlow do Result := 0; end; end;Tryexcept 语句块主要处理 缺省异常 用户一般只处理一些特殊的异常,并不是处理所有的异常.对那些用户不关心的异常就可以采 用缺省异常来处理. try /正常程序代码 except on EExceptionClass do /处理特定类型的异常 else /缺省异常处理 end;注:else 块必须位于 except 块的最后,可响应任何类型的异常 异常的传递 Delphi 对异常的处理方式是向后扫描程序的调用栈.假如过程 A 内有过程保护代码块,在此代 码块内又调用了过程 B,过程 B 没有异常保护,过程 B 调用了过程 C,在 C 内发生了异常.如 C 内有该异常的处理程序,那么程序调用 C 的异常处理代码 Delphi_异常处理_详解(全.txt

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1