设为首页 加入收藏

TOP

delphi异常捕获try except语句 和 try finally语句用法(二)
2017-10-09 13:49:30 】 浏览:5244
Tags:delphi 异常 捕获 try except 语句 finally 用法
IntOverFlow 整数溢出
ERangeError 整数越界

浮点计算异常

EMathError 浮点计算异常(基类)
EInvalidOp 无效浮点操作指令
Eoverflow 浮点操作上溢
Eunderflow 浮点操作下溢
EZeroDivide 浮点计算除0

硬件异常

EProcessorException 硬件异常(基类)
ESingleStep 应用程序产生单步中断
Ebreakpoint 应用程序产生断点中断
Efault 故障(继承EProcessorException,也是基类)
EStackFault 对处理器栈段的非法访问
EPageFault 内存管理器无法正确使用交换文件
EGPFault 保护性错误,一般由未初始化指针或对象造成
EInvalidOpCode 处理器遇到未定义指令

堆异常和(I/O异常)
堆异常:

EOutOfMemory 堆中没有足够的内存完成操作
EInvalidPointer 试图访问一个堆外的指针
(I/O异常)
EInOutError DOS输入/输出错误

字符转换/类型转换异常和哑异常

字符转换异常
EConvertError 数字到字符串或字符串到数
字转换错误

类型转换异常

EInvalidCast 类型转换异常

哑异常

EAbort 调用Abort产生,不显示错误提示框

对象异常类
对象异常类是针对非组件对象引发的异常而定义的.
对象异常类包括:

1 流异常类
2 打印异常类
3 图形异常类
4 字符串链表异常类

流异常类

流异常是指在程序中进行与流相关的操作时产生的异常.流异常类的基类是EStreamError,其他流异常类都直接或间接从它派生.
派生关系见书48页图

打印异常

打印异常是由于应用程序向不存在的打印机发送打印命令或由于某种原因打印工作无法送到打印机时引发的.
打印异常类为Eprinter,定义于Printers单元

图形异常

图形异常主要包括EInvalidGraphic和
EInvalidGraphicOperation两个类均定义于Graphics单元

EInvalidGraphic异常满足下列情况之一时引发:

当应用程序试图向一个并不包含合法的位图,图象,元文件或用户自定义图形类型的文件中装入图象时.
当应用程序试图装入不可识别扩展名的文件时
当图象与LoadFromClipboardFormat或SaveToClipboardFormat中的格式不匹配时.
当应用程序试图将图象的PixelFormat设为不支持的值

EInvalidGraphicOperation异常在满足下列条件之一时发生:

应用程序访问图象中不存在的扫描线时.
应用程序不能成功写入图象时.
应用程序在画布未处于有效状态时进行绘制.
应用程序装入未知或不支持的图象格式时.
应用程序将图象的PixelFormat设为不支持的值时
不能分配该操作的句柄时.

字符串链表异常

字符串链表异常是由于用户对字符串链表进行非法操作时引发的.
包括EStringListError,EListError等.由于许多部件都有一个Tstrings抽象类的属性(如Tiistbox组件的Items属性等),因而字符串链表异常在组件编程中很重要.

EStringListError一般在字符串链表越界时产生.而EListError异常通常在以下情况下发生:

当索引项超出链表范围时
当字符串链表的Duplicates属性设置为dupError
同时应用程序试图加入一个重复的字符串时.
当向已排序的字符串链表中插入字符串时.

组件异常类

组件异常类用于响应组件异常,组件异常是由于对VCL组件进行操作时,违反了组件的使用规则及其特征而引发的,可分为两大类:
通用组件异常、专用组件异常、通用组件异常。
常见的有非法操作异常,组件异常和资源不足异常三种类型,对应于EInvalidOpetation,EComponentError和EOutOfResource异常类.

引发非法操作异常的原因有:

应用程序试图对Parent属性为nil的组件进行一些需要窗口句柄的操作.
试图对窗体拖放操作.

引发组件异常的原因有:
Delphi不能注册某个组件

应用程序不能重命名某个组件
资源不足异常被引发是由于当应用程序试图创建窗口句柄而操作系统没有多余的句柄可分配

专用组件异常:许多组件都定义了相应的组件异常类.

列出几个典型的组件异常类:

EMenuError异常,菜单异常,是由于程序对菜单的非法操作而引发的.定义于Memus单元
EInvalidGridOperation异常.非法的网格操作,如试图引用一个不存在的网格单元时引发.定义于Grids单元
EDatabaseError异常.数据库异常是由于对数据库的非法操作引起的.

用户自定义异常类

创建用户自定义异常类的方法

抛出自定义异常
用户自定义异常类与内置异常类的区别
异常类对象与其他类对象的区别
创建用户自定义异常类的方法

选择Exception作为基类,按照定义类的一般方法,建立自定义的异常类就可以了.
如:

type EMyException = class(Exception) //需要定义属性或方法时,写在此处即可 end; 

抛出自定义异常
Delphi不会管理用户自定义异常的抛出,程序员必须自己抛出自己创建的异常.用raise语句可抛出异常:

raise EMyException.Create('My Exception'); 

用户自定义异常类与内置异常类的区别

Delphi不会自动响应用户自定义的异常类,所以用户自定义的异常类需要使用raise语句抛出,而内置异常类与运行期真实的异常现象相对应,当异常发生时,操作系统会捕捉到此异常,通知Delphi去响应.

异常类对象与其他类对象的区别

异常类对象创建后,不需要由用户释放它,当异常处理之后,系统会自动调用析构函数释放异常类对象.而其他类需要由用户来释放.

Delphi7的异常处理结构

try…finally 语句块
Try…except语句块
使用raise抛出异常

try…finally 语句块
try…finally 语句块是用于资源保护和恢复系统状态,不管try部分的操作是否有异常发生,finally部分的操作都要进行.
语法如下:

try 被保护语句 finally 处理语句(无论异常是否发生,都必须处理) end; 

try…finally 语句块主要用于资源保护

应用程序向系统申请了资源(如内存,图形句柄),当不需要这些资源时,就应该及时释放资源.
句柄:系统资源是有限的,一般构成一个资源链,链的长度是有限的,当系统给应用程序分配资源时,给每个资源设置一个ID号,这个ID号就是句柄.(系统资源相当于一个个房间,而句柄就相当于房间号.)
句柄有限:1 资源是有限的;2数字表达的范围也是有限的(整数有范围的)

Try…except语句块
Try…except语句块用于运行期错误处理,程序员可以用它编写对不同类型异常的处理.
异常发生后,判断异常的类型,正确处理异常.

Try…except语句块一般和On…Do子句连用;
语法如下:

function Test(x, y: Real): Real; begin try Result := x / y;//被保护语句 except on EInvalidOp do Result := 0;//
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇[转载] delphi中ini 文件操作记要.. 下一篇Delphi的idhttp报508 Loop Detect..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目