异常处理与调试2

让编程改变世界

Change the world by program


Delphi 异常类

利用异常机制,就是允许写代码时可以假设:如果用户可以得到子程序调用或计算的结果,这些结果一定是有效的。

如果你在写程序的时候发现自己在为几乎每个单独的语句编写异常处理程序,那么说明还没有掌握要点。

如果你在阅读经典代码时经常考虑“如果执行到这里,那么在此之前的每件事情都一定已经运行得很好了!”那么就说明已经掌握了正确的概念。

异常类是Delphi异常处理机制的核心,也是Delphi异常处理的主要特色。

Delphi提供的所有异常类都是Exception类的子类。用户也可以从Exception类派生一个自定义的异常类。

Delphi 提供了一个很庞大的异常类体系,这些异常类几乎涉及到编程的各个方面。

从大的方面可以把异常类分为运行库异常、对象异常、组件异常 3 类。下面介绍它们中常用的异常类!

异常的基本语法结构

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

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

程序可以捕获并处理这个异常类,以确保程序的正常结束以及资源的释放和数据不受破坏。

当然如果程序不进行处理,则系统会自动提供一个消息框。

异常响应与 try…except 语句

try…except语句的一般格式如下:

[codesyntax lang="delphi"]

try 				//try 保护代码块
被保护语句
except //异常处理块
异常处理语句 //异常不发生,不处理
end;

[/codesyntax]

Except关键字后面经常还可以加一系列“on…do”语句:

[codesyntax lang="delphi"]

try                     			//try 保护代码块
被保护语句
except //异常处理块
on <异常对象类型 1> do <语句 1> //捕获指定类型的异常对象,进行处理
on <异常对象类型 n> do <语句 n> //捕获指定类型的异常对象,进行处理
else
<语句 n+1> //默认的异常处理代码
end;

[/codesyntax]

[codesyntax lang="delphi"]

try
b:= StrToFloat(edit1.Text);
c:= StrToFloat(edit2.Text);
a:= b /c;
Edit3.Text:= FloatToStr(a);
except
on Ezerodivide do Edit3.Text:='不能用 0 除';
on EMathError do Edit3.Text:='计算错误';
else
Edit3.Text:='发生异常';
end;

[/codesyntax]

异常保护与 try…finally 语句

确保回收分配的资源是程序健壮性的一个关键,一般说来需要保护的资源包括:文件、内存、Windows资源和对象。

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

[codesyntax lang="delphi"]

n:= 0;
GetMem(pPointer, 1024); //分配 1KB 的内存
m:= 10 div n; //这里将触发被零除的异常
FreeMem(pPointer, 1024); //永远执行不到这里

[/codesyntax]

try…finally 语句的一般格式如下:

[codesyntax lang="delphi"]

try 		    	//try 保护代码块
被保护语句
finally //异常处理块
异常处理语句 //无论异常发生否,都必须处理
end;

[/codesyntax]

[codesyntax lang="delphi"]

n:= 0;
GetMem(pPointer, 1024); //分配 1KB 的内存
try
m:= 10 div n; //这里将触发被零除的异常
finally
FreeMem(pPointer, 1024); // 必须被执行
end;

[/codesyntax]

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个命令。

[buy] 获得所有教学视频、课件、源代码等资源打包 [/buy]
[Downlink href='http://kuai.xunlei.com/d/BdsUAwJp.gDVMehR676']视频下载[/Downlink]

异常处理与调试2 - 零基础入门学习Delphi51的更多相关文章

  1. 异常处理与调试4 - 零基础入门学习Delphi53

    调试(Debug) 让编程改变世界 Change the world by program 调试(Debug) 在应用程序开发中检测.处理程序中的错误是一个非常重要的环节.在Delphi的集成开发环境 ...

  2. 异常处理与调试3 - 零基础入门学习Delphi52

    异常处理与调试3 让编程改变世界 Change the world by program 两种结构的嵌套 要在一个过程里同时实现处理异常和保护资源分配,关键要保证"try-except&qu ...

  3. 异常处理与调试6 - 零基础入门学习Delphi55(完)

    调试(Debug) 让编程改变世界 Change the world by program 使用调试窗口 为方便调式程序,Delphi中提供了许多调试窗口,给开发人员的调试工作带来了极大的便利. 断点 ...

  4. 异常处理与调试5 - 零基础入门学习Delphi54

    调试(Debug) 让编程改变世界 Change the world by program [caption id="attachment_2731" align="al ...

  5. 小甲鱼零基础入门学习python--课后作业

    [小甲鱼零基础入门学习python--课后作业] 小甲鱼零基础入门学习python--课后作业 本章内容: 1.基础部分的作业 2.函数部分的作业 3.字典.集合.文件部分作业 4.异常 5.Easy ...

  6. 函数:我的地盘听我的 - 零基础入门学习Python019

    函数:我的地盘听我的 让编程改变世界 Change the world by program 函数与过程 在小甲鱼另一个实践性超强的编程视频教学<零基础入门学习Delphi>中,我们谈到了 ...

  7. 【Python教程】《零基础入门学习Python》(小甲鱼)

    [Python教程]<零基础入门学习Python>(小甲鱼) 讲解通俗易懂,诙谐. 哈哈哈. https://www.bilibili.com/video/av27789609

  8. 《零基础入门学习Python》【第一版】视频课后答案第001讲

    测试题答案: 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方 ...

  9. 零基础入门学习Python(1)--我和Python的第一次亲密接触

    前言 最近在学习Python编程语言,于是乎就在网上找资源.其中小甲鱼<零基础入门学习Python>试听了几节课,感觉还挺不错,里面的视频都是免费下载,小甲鱼讲话也挺幽默风趣的,所以呢,就 ...

随机推荐

  1. IOS面试问题总结

    IOS面试问题总结 分类: IOS开发2013-11-20 17:26 10458人阅读 评论(1) 收藏 举报   目录(?)[+]   通过网络搜寻和自己总结经历找了一些IOS面试经常被问道的问题 ...

  2. Codeforces Round #276 (Div. 2) 解题报告

    题目地址:http://codeforces.com/contest/485 A题.Factory 模拟.判断是否出现循环,如果出现,肯定不可能. 代码: #include<cstdio> ...

  3. 前端面试题之js篇

    前端面试也可为是鱼龙混杂,各公司面试题的种类也大不相同,有的公司注重基础语法,面试题偏于ES,有的公司偏于页面逻辑,会考差一些js的应用,现将遇到过的题和典型的题整理一下. 1. 0.2-0.1 == ...

  4. Windows 8.1 正式版 MSDN第二版 官方简体中文/英文版 (专业版/企业版)

    说明:文件名cn开头的是简中版文件名en开头的是英文版文件名含x64的为64位版本文件名含x86的为32位版本文件名含enterprise的为企业版文件名含pro_vl的为专业批量授权版文件名不含en ...

  5. php安装pear、pecl

    安装pear.pecl特别简单,只需要两步. wget http://pear.php.net/go-pear.phar php go-pear.phar [root@localhost bin]# ...

  6. 漏洞:WebRTC 泄漏用户IP

    WebRTC又称为“网页即时通信”,是一组API函数,它经过W3C组织的认证,支持浏览器之间的语音通话.视频聊天和P2P模式分享文件.      这个协议主要包括:getUserMedia,RTCPe ...

  7. 关于UIButton中的ContentEdgeInsets的深入研究

    UIButton的contentEdgeInsets属性的深入研究 由于用UIButton这个属性做过一些东西,但是对它的规律始终不太了解,虽然苹果官方文档的解释大体上可以理解为,这个属性设置的是内边 ...

  8. Linux优化,history增加详细历史记录

    主要功能: 1, 可以记录哪个ip和时间(精确到秒)以及哪个用户,作了哪些命令 2,最大日志记录增加到4096条   把下面的代码直接粘贴到/etc/profile后面就可以了 #history mo ...

  9. Linux上夏时令的应对

    问题 今天,有游戏客户找来说,2016.11.6号洛杉矶将会进入冬时令,他们在洛杉矶机房的ECS在使用的是洛杉矶的当地时间,问我,进入冬时令,对他们的linux有啥影响?是否需要做好,批量修改linu ...

  10. hdu 5311 Hidden String(find,substr)

    Problem Description Today is the 1st anniversary of BestCoder. Soda, the contest manager, gets a str ...