Delphi异常处理try except语句和try甄选.

上传人:碎****木 文档编号:229514662 上传时间:2021-12-25 格式:DOCX 页数:20 大小:29.11KB
返回 下载 相关 举报
Delphi异常处理try except语句和try甄选._第1页
第1页 / 共20页
Delphi异常处理try except语句和try甄选._第2页
第2页 / 共20页
Delphi异常处理try except语句和try甄选._第3页
第3页 / 共20页
亲,该文档总共20页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Delphi异常处理try except语句和try甄选.》由会员分享,可在线阅读,更多相关《Delphi异常处理try except语句和try甄选.(20页珍藏版)》请在金锄头文库上搜索。

1、Delphi 异常处理 try except 语句和 try#.Delphi 异常处理 try except 语句和 try finally 语句用法以及区别一、异常的来源在 Delphi 的应用程序中,下列的情况都比较有可能产生异常。(1) 文件处理(2) 内存分配(3) Windows 资源(4) 运行时创建对象和窗体(5) 硬件和操作系统冲突二、异常的处理(1) tryexceptend;在 try 体内的代码发生异常时,系统将转向 except 部分进行异常的处理。这是Delphi 处理异常的最基本的方式之一。(2) tryfinallyend;这种异常处理结构一般用于保护 Windo

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

3、类的派生类。type EMyException = class(Exception);当然,基类可以是 Exception 或者 Exception 的任何一个任何层次的派生类。(2) 在程序中抛出一个异常。根据不同的情况抛出异常是使用异常的最基本的模式。在 Delphi 中,由 raise 语句来实现。(3) 在 tryexceptend 中更加精确的捕捉异常。使用 on E:异常类 do结构可以在 do 体内处理特定异常类所抛出的异常。四、异常的调试20 / 17doc 可编辑在 Delphi IDE 中,解除“Debugger Options”(可以使用菜单ToolsDebugger O

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

5、下自定义异常的方法和异常处理的语法结构与实现.异常:理解为一种特殊的事件,该事件发生时,程序的正常执行将被打断.由程序导致的不正常情况是错误而不是异常,程序错误与异常不是相同的概念. 异常是为方便用户报告错误并处理错误而创建的机制,一般是由操作系统完成的. 运行期错误处理软件开发过程中,程序员必须提供适度的方式来处理不可避免的错误.一般方法如下: 1 传统方法2 使用异常进行错误处理传统方法在 Pascal 早期版本中,程序员必须借助编译器开关和状态变量去检测和处理存在的错误.$I-此编译器指令关闭 I/O 检测 Assign(InFile,InputName); Reset(InFile);

6、$I+此编译器指令恢复 I/O 检测 If IOResult0 then错误处理代码;使用异常进行错误处理结构化异常处理是 Delphi 语言内建的特性.为我们处理异常提供了方便.处理异常有两方面:1 异常处理可确保适当地恢复在应用程序中分配或改变的任何资源.2 结构化异常处理为开发人员提供了一种一致的处理各种类型运行期错误的方式Delphi7 异常处理机制异常处理的基本思想是通过提供规范方式处理软,硬件错误的能力,使程序更加健壮. 异常处理可以将处理错误的代码与正常的逻辑处理代码相分离.Delphi 缺省的方式是在应用程序收到异常之前捕获异常.IDE 会给出一个”预警”对话框,以指明应用程序

7、将要产生异常.异常处理机制是一种程序设计安全策略,它是建立在保护块思想上,通过try 和end 语句块对代码的封装确保在程序发生异常时,程序能够正常运行或释放所占用的资源.Delphi7 异常处理机制传统程序设计中,用如下的伪代码方法来检查和处理程序错误: 执行一个任务If 前一个任务未能正确执行执行错误处理 执行下一个任务If 前一个任务未能正确执行执行错误处理Delphi7 异常处理机制例;tryAge := StrToInt(Edit1.Text);ShowMessage(Format(生于%d 年, YearOf(Now) - Age); excepton EConvertError

8、doshowmessage(输入编辑框的不是一个有效的数字!); on ERangeError doshowmessage(输入编辑框的年龄值太大!); end;异常类Delphi7 根据异常类型定义了相应的异常类.所有异常类的基类都是 Exception 类. Delphi7 内置了大量的异常类,用户也可以通过 Exception 类自定义异常类.记住异常类的要点:1 异常类是响应不同异常现象的入口.2 熟悉异常类的层次结构. Exception 异常类Exception 是所有异常类的基类,它并不是以T开头,而是以E开头,它的派生类也是以E开头的.Exception 类定义于 SysUti

9、ls 单元中. Exception 类最常用的方法是 Create 方法:Constructor Create(const Msg:string); Exception.Create(我自己创建的异常!);该方法用于创建一个异常类的实例,也可以显示错误信息,也可直接用这个方法提交一个异常raise Exception.Create(我抛出的异常!); 例:tryraise Exception.Create(我抛出的异常!); excepton E: Exception doshowmessage(异常类名称: + E.ClassName+ #13#10 + 异常信息: + E.Message)

10、; end;Delphi7 内置的异常类Delphi7 根据异常现象的类型定义了相应的异常类,这些异常类又称为 Delphi7 内置的异常类.具体分为运行时库异常类,对象异常类和组件异常类三大类. 运行时库异常类(RTL)运行时库异常类可分为以下几种:1 整数计算异常 2 浮点计算异常 3 硬件异常 4 堆异常 5 输入输出异常(I/O 异常) 6字符转换异常 7 类型转换异常 8 哑异常整数计算异常EIntError 整数计算异常(基类) EDivByZero 整数除 0 溢处EIntOverFlow 整数溢出ERangeError 整数越界浮点计算异常EMathError 浮点计算异常(基

11、类) EInvalidOp 无效浮点操作指令Eoverflow 浮点操作上溢Eunderflow 浮点操作下溢EZeroDivide 浮点计算除 0硬件异常EProcessorException 硬件异常(基类) ESingleStep 应用程序产生单步中断Ebreakpoint 应用程序产生断点中断Efault 故障(继承 EProcessorException,也是基类) EStackFault 对处理器栈段的非法访问EPageFault 内存管理器无法正确使用交换文件EGPFault 保护性错误,一般由未初始化指针或对象造成EInvalidOpCode 处理器遇到未定义指令堆异常和(I/

12、O 异常) 堆异常:EOutOfMemory 堆中没有足够的内存完成操作EInvalidPointer 试图访问一个堆外的指针(I/O 异常)EInOutError DOS 输入/输出错误字符转换/类型转换异常和哑异常字符转换异常EConvertError 数字到字符串或字符串到数字转换错误类型转换异常 EInvalidCast 类型转换异常哑异常EAbort 调用 Abort 产生,不显示错误提示框对象异常类对象异常类是针对非组件对象引发的异常而定义的. 对象异常类包括:1 流异常类2 打印异常类3 图形异常类4 字符串链表异常类流异常类流异常是指在程序中进行与流相关的操作时产生的异常.流异

13、常类的基类是EStreamError,其他流异常类都直接或间接从它派生.派生关系见书 48 页图打印异常打印异常是由于应用程序向不存在的打印机发送打印命令或由于某种原因打印工作无法送到打印机时引发的.打印异常类为 Eprinter,定义于 Printers 单元图形异常图形异常主要包括 EInvalidGraphic 和EInvalidGraphicOperation 两个类均定义于 Graphics 单元EInvalidGraphic 异常满足下列情况之一时引发:当应用程序试图向一个并不包含合法的位图,图象,元文件或用户自定义图形类型的文件中装入图象时.当应用程序试图装入不可识别扩展名的文件

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

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

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 教育/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号