[什么叫基金]异常处理与调试2 – 零基础入门学习Delphi51

反常处理与调试2

让编程改动国际

Change the world by program

Delphi 反常类

使用反常机制,便是答应写代码时能够假定:假如用户能够得到子程序调用或核算的成果,这些成果必定是有用的。

假如你在写程序的时分发现自己在为简直每个独自的句子编写反常处理程序,那么阐明还没有把握要害。

假如你在阅览经典代码时常常考虑“假如履行到这儿,那么在此之前的每件工作都必定现已运转得很好了!”那么就阐明现已把握了正确的概念。

反常类是Delphi反常处理机制的中心,也是Delphi反常处理的首要特征。

Delphi供给的一切反常类都是Exception类的子类。用户也能够从Exception类派生一个自定义的反常类。

Delphi 供给了一个很巨大的反常类体系,这些反常类简直涉及到编程的各个方面。

从大的方面能够把反常类分为运转库反常、目标反常、组件反常 3 类。下面介绍它们中常用的反常类!

反常的根本语法结构

Delphi反常处理机制建立在维护块(Protected Blocks)的概念上。

所谓维护块是用保留字try和end封装的一段代码称为维护块,维护块的作用是当应用程序产生错误时主动创立一个相应的反常类(Exception)。

程序能够捕获并处理这个反常类,以保证程序的正常完毕以及资源的开释和数据不受损坏。

当然假如程序不进行处理,则体系会主动供给一个音讯框。

反常响应与 try…except 句子

try…except句子的一般格局如下:

try ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //try 维护代码块

? ? ? ? 被维护句子

except? ?? ? ? ? ? ? ? ? ? ? ? ? //反常处理块

? ? ? ? 反常处理句子 ? ? ? ? //反常不产生,不处理

end;

Except要害字后边常常还能够加一系列“on…do”句子:

try? ?? ?? ?? ?? ?? ?? ?? ? ? ? ? ? ? ? ? ? ? ? //try 维护代码块

? ? ? ? 被维护句子

except ? ? ? ? ? ? ? ? ? ? ? ?? ?? ?? ?? ?? ?? ?? ?//反常处理块

? ? ? ? on??do??//捕获指定类型的反常目标,进行处理

? ? ? ? on??do??//捕获指定类型的反常目标,进行处理

? ? ? ? else

? ? ? ? ? ? ? ?? ?? ?? ?? ?? ? ? ? ? ? //默许的反常处理代码

end;

try

? ? b:= StrToFloat(edit1.Text);

? ? c:= StrToFloat(edit2.Text);

? ? a:= b /c;

? ? Edit3.Text:= FloatToStr(a);

except

? ? on Ezeropide do Edit3.Text:='不能用 0 除';

? ? on EMathError do Edit3.Text:='核算错误';

? ? else

? ?? ???Edit3.Text:='产生反常';

end;

反常维护与 try…finally 句子

保证收回分配的资源是程序健壮性的一个要害,一般说来需求维护的资源包含:文件、内存、Windows资源和目标。

下面一段程序就会形成1KB的内存资源的丢掉:

n:= 0;

GetMem(pPointer, 1024); ? ? ? ? //分配 1KB 的内存

m:= 10 p n; ? ? ? ? ? ? ? ? ? ? ? ?? ???//这儿将触发被零除的反常

FreeMem(pPointer, 1024); ? ? ? ? //永久履行不到这儿

try…finally 句子的一般格局如下:

try ? ? ? ? ? ? ? ?? ???? ? ? ? //try 维护代码块

? ? 被维护句子

finally? ???? ? ? ? ? ? ? ? //反常处理块

? ? 反常处理句子? ? ? ? //不论反常产生否,都有必要处理

end;

n:= 0;

GetMem(pPointer, 1024); ? ? ? ?? ???//分配 1KB 的内存

try

? ? ? ? m:= 10 p n;? ?? ?? ???? ? ? ? //这儿将触发被零除的反常

finally

? ? ? ? FreeMem(pPointer, 1024); ? ? ? ? // 有必要被履行

end;

try…finally结构与try…except结构的差异

关于try…finally结构来说,不论try部分的代码是否触发反常,finally部分总是履行的。假如产生反常,就提早跳到finally部分。而关于 try…except结构来说,只有当触发了反常后,才会履行except部分的代码。

在try…except结构中,当反常被处理后反常目标就被开释,除非从头触发反常。而在try…finally结构中,即便finally部分对反常作了处理,反常目标依然存在。

finally部分不能处理特定的反常,由于它没有try…except结构中的反常句柄,无法知道切当的反常类型。因而,在finally部分只能对反常做抽象的处理。

在try…finally结构中,假如在try部分调用规范指令Exit、Break或Continue,将导致程序的履行流程提早跳到finally部分。finally部分不答应调用上述3个指令。

视频下载
技能, IT技能, Delphi, 视频教程

原文发布于宽客论坛,点击阅览原文
发布于 2024-02-01 15:02:36
收藏
分享
海报
69
目录