第1章Dephi的编程语言ObjectPascalppt课件_第1页
第1章Dephi的编程语言ObjectPascalppt课件_第2页
第1章Dephi的编程语言ObjectPascalppt课件_第3页
第1章Dephi的编程语言ObjectPascalppt课件_第4页
第1章Dephi的编程语言ObjectPascalppt课件_第5页
已阅读5页,还剩107页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1章 delphi的编程语言object pascal1.1 认识delphi1.2 object pascal语言基础1.3 delphi 中的程序调试及异常处理本章小结1.1 认识delphi u感受delphi编程udelphi的特点udelphi编程环境及其作用udelphi应用程序的文件组成udelphi中几个重要概念udelphi学习方法本节要点练习感受delphi编程下面在delphi的集成开发环境中编写一个最简单程序,并运行。让大家对delphi的编程有一种感性认识,并体验delphi快捷、方便、高效的编程环境。演示delphi的特点delphi最早是borland公司于19

2、94年底发布的一种可视化编程语言。它以object pascal作为基本开发语言。目前已从delphi 1.0发展到delphi 7.0。它适用于windows 9x, windows xp,windows 2000或更高的版本操作系统,同时也推出lynux操作系统下的kylix版本。u编程效率高、代码质量好u领先的数据库技术u强大的internet应用开发功能u与office 的巧妙结合可视化编程语言u编程语言的发展 机器语言汇编语言高级语言(结构化面向对象可视化)u面向对象的程序设计(object oriented programming)u可视化(visual)编程语言 delphi,v

3、fp,vb,vc 等,由组件来构造应用程序。面向对象的程序设计u对象:把要处理的数据和处理这些数据的方法组合成的一种数据类型。对象有如下三大特性: 封装性:把数据和处理数据的方法定义在同一数据类型(对象)中,一般只能用该对象中的方法来处理这些数据。 继承性:可以用已定义的对象来构造其子对象,并且子对象可以访问其父对象中的数据和方法。 多态性:为动作赋予一个可由对象序列共享的名称,对象序列中的每个对象均以适合于自身的方式实现该操作。u事件驱动对象的多态性实例 implementation$r *.dfmtype tperson=class name:string; weight:integer;

4、 constructor create(aname:string;aweight:integer); function gettitle:string; virtual; /父类中使用虚方法 function getinformation:string; end;tstudent=class(tperson) school:string; constructor create(aname:string;aweight:integer;aschool:string); function gettitle:string; override;/子类中使用覆盖 end;constructor tper

5、son.create(aname:string;aweight:integer);begin inherited create; name:=aname; weight:=aweight;end;function tperson.gettitle:string;begin result:=name+ is a person;end;对象的多态性实例(续)constructor tstudent.create(aname:string;aweight:integer;aschool:string);begin inherited create(aname,aweight); school:=as

6、chool;end;function tstudent.gettitle:string;begin result:=name+ is a student of +school;end;procedure showtitle(person:tperson);begin showmessage(person.getinformation);end;procedure tform1.button1click(sender: tobject);var aperson:tperson; astudent:tstudent;begin aperson:=tperson.create(david,60);

7、astudent:=tstudent.create(young,65,tsinghua); showtitle(aperson); /显示某人相关的信息 showtitle(astudent); /显示某学生相关的信息 aperson.free; astudent.free;end;delphi编程环境及其作用菜单栏与工具栏组件(component)栏对象树状列表(object treeview)对象监视器(object inspector)窗体设计器(form designer)代码编辑器(code editor)项目管理器(project manager)delphi应用程序的文件组成de

8、lphi应用程序的文件主要有: 工程文件(.dpr);单元文件(.pas);窗体文件(.dfm)等。delphi中几个重要概念u类(class):delphi中的对象类型数据,它由类的成员构成。u对象:类数据类型的实例。u组件:组成应用程序的构件,其类型一般为类类型。我们常用的是组件的属性、方法及事件。u组件的事件:能够把发生于某一组件上的操作同一指定的方法进行关联。当该操作发生时会自动执行指定的方法。窗体或窗体上的组件接收事件,事件可由用户引发(例如键盘或鼠标操作),可由系统引发(例如定时器事件),也可由代码间接引发(例如当代码装载其他窗体时产生的load事件)类的成员域(字段):类中的数据

9、。方法:类中的过程或函数。属性:类似于类中的域,但它本身并不占存储空间,对它进行存取操作,可以是直接存取,也可以是调用相应的方法,它可以是只读,只写或读写。delphi学习方法u转变编程思维方式u重视上机u应用为主u多参考他人的编程经验和技巧(delphi参考书,delphi网站)delphi网站delphi 专家:delphi 园地:delphi程序员之家:5.delphi学习方法本节要点 (1.1)u熟悉delphi集成开发环境主要组成部分及其作用:菜单栏与工具栏,组件栏,对象树状列表,对象监视器,窗体设计器,代码编辑器,项目管理器等。u掌握delphi应用程序的文件组成:项目文件(.dp

10、r);单元文件(.pas);窗体文件(.dfm)等。u了解几个重要概念:类,对象,组件,组件的属性、方法及事件等。练习(1.1)u理论1. delphi集成开发环境主要有哪几个部分组成,并说明各部分的作用。2.一个delphi应用程序主要由哪些文件组成?3.预习object pascalu上机实训教程1.1,1.21.2 object pascal语言基础 u标识符u数据类型 u变量和常量u运算符和表达式u语句u过程和函数u程序和单元本节要点练习标识符u标识符必须由字母(az、az)、数字(09)或下划线组成,不区分字母的大小写。u标识符的第一个字符必须是字母或下划线。u标识符的长度不应超过2

11、55个字符,如果超过255字符就只有前255个有效。u不能将保留字用作标识符,如if、and、do等。u尽量不要重新定义已预定义的标识符,如一些标准的数学函数sqrt、sin等。数据类型 有序类型(ordinal) 实型(real)整型(integer)字符型(character)布尔型(boolean)枚举(enumerated)子界(subrange)数组(array)记录(record)集合(set)文件(file)类(class)类引用(class reference)接口(interface)简单类型(simple)字符串类型(string)构造类型(structured)变体类型(

12、variant)指针类型(pointer)过程类型(procedural)整型(integer)u常用整型:integer-21474836482147483647有符号 4字节cardinal04294967295 无符号 4字节u基本整型:shortint-128127有符号 1字节smallint-3276832767有符号 2字节longint-21474836482147483647有符号 4字节int64263 263 -1有符号 8字节byte0255 无符号 1字节word065535 无符号 2字节longword04294967295 无符号 4字节字符型(characte

13、r)u常用字符型:charansi字符集 1字节表示: a或#97 或#39 空格u基本字符型:ansichar ansi字符集 1字节widechar unicode字符集(前256个是ansi字符集) 2字节布尔型(boolean)uboolean(1字节)false true ord(false) = 0 ord(true) = 1pred(true) = false succ(false) = trueubytebool (1字节), wordbool (2字节), longbool (4字节)false true ord(false) = 0 ord(true) 0pred(fals

14、e) = true succ(false) = true枚举(enumerated)type 类型名=(标识符1,标识符2, 标识符n);如:type tmycolor = (mcred, mcblue, mcgreen, mcyellow, mcorange); answer = (ansyes, ansno, ansmaybe);其对应的序号为0,1,2子界(subrange)type somenumbers = -128.127; caps = a.z;type tcolors = (red, blue, green, yellow, orange, purple, white, bla

15、ck); tmycolors = green.white;实型(real)u常用实型real 5.0 10-324 1.7 103088字节u基本实型real48 2.9 10-39 1.7 10386字节single 1.5 10-45 3.4 1038 4字节double 5.0 10-324 1.7 103088字节etended 3.6 10-4951 1.1 10493210字节comp -263+1 263 8字节currency-922337203685477.5808 922337203685477.5807 8字节字符串类型(string)u常用字符串string $h+ a

16、nsistring , $h- shortstringborland borland youll see youll see 无字符line 1#13#10line 2中华人民共和国 u基本字符串shortstring 255 个字符ansistring 231 个字符widestring230个字符数组(array)type 类型名=array有序类型 of 基类型;如:type myarray= array1.100 of char;type tmatrix = array1.10, 1.50 of real;记录(record)type 类型名 = record 域名:类型;. 域名:类

17、型;end;如:type tdaterec = record year: integer; month: (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec); day: 1.31; end;集合(set)type 类型名= set of 有序类型;如:type tintset = set of 1.250;set of byte;set of (club, diamond, heart, spade);set of char;集合值表示:1, 3, 5, 7, 9 ,a,b,c文件(file)type phoneentry

18、= record firstname, lastname: string20; phonenumber: string15; listed: boolean; end; phonelist = file of phoneentry;类(class)type tlistcolumns = class(tcollection) private fowner: tcustomlistview; function getitem(index: integer): tlistcolumn; procedure setitem(index: integer; value: tlistcolumn); pr

19、otected function getowner: tpersistent; override; procedure update(item: tcollectionitem); override; public constructor create(aowner: tcustomlistview); function add: tlistcolumn; property owner: tcustomlistview read fowner; property itemsindex: integer: tlistcolumn read getitem write setitem; defau

20、lt; end; /类不能定义在函数或过程中类引用类型(class reference)type 类引用类型名=class of 类类型;如:type tclass = class of tobject;var anyobj:tclass;anyobj变量可以引用任何其他类。类引用类型在用户要调用一个类的方法,但编译时又不知道该类的类型时非常有用。接口(interface)type 接口名 = interface (父接口) 各类中共同的方式或属性列表end;它体现的是多个互不相关的类之间的相同行为。变体类型(variant)变体类型与其他数据类型结合使用会产生类型的自动转换。var v1,

21、v2, v3, v4, v5: variant; i: integer; d: double; s: string;begin v1 := 1; integer value v2 := 1234.5678; real value v3 := hello world!; string value i := v1; i = 1 (integer value) d := v2; d = 1234.5678 (real value) s := v3; s = hello world! (string value) 指针类型(pointer)type 指针类型名= 类型对字符串类型和类类型,其内部实现方

22、式均用指针。但为方便使用,delphi把许多运用指针的地方隐藏起来,用户在编制程序时可以不把其当作指针来处理,而让delphi来处理容易出错的问题。过程类型type tintegerfunction = function: integer; tprocedure = procedure; tstrproc = procedure(const s: string); tmathfunc = function(x: double): double;变量和常量u变量u常量真常量类型常量变量var 变量名1,变量名2,变量名n:类型;如:(全局变量在说明时还可以给初值)var x, y, z: dou

23、ble; i, j, k: integer; digit: 0.9; okay: boolean; crtmode: byte absolute $0040; s:string; /字符串变量访问 rd: tdaterec; /记录变量访问字符串变量访问(s:string)u作为字符串来访问s:=abcde;u作为单个字符来访问s1,s2,s3等访问单个字符,类似于数组中的每个元素。记录变量访问(rd:tdaterec)u点域访问rd.year:=2001; rd.month:=feb; rd.day:=12;uwith do访问with rd do year:=2001;type tdate

24、rec = record year: integer; month: (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec); day: 1.31; end;真常量const 常量名=常量表达式;const min = 10; max = $100; center = (max - min) div 2; beta = chr(225); numchars = ord(z) - ord(a) + 1; message = out of memory; errstr = error: + message + . ; errpos

25、= 80 - length(errstr) div 2; ln10 = 2.302585092994045684; ln10r = 1 / ln10; numeric = 0.9; alpha = a.z, a.z; alphanum = alpha + numeric;类型常量const 常量名:类型=值;(兼容老版本,要加编译开关$j+;现在可以直接在全局变量中赋初值)consti:integer=23;digits1: array0.4 of char=(0,1,2,3,4);digits2: array0.4 of char = 01234;type tcube=array0.1, 0

26、.1, 0.1 of integer;tmonth=(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec);tdate = record d: 1.31; m: tmonth; y: 1900.1999; end;const maze:tcube =(0, 1),(2, 3),(4, 5),(6,7);someday: tdate = (d: 2; m: dec; y: 1960);运算符和表达式u算术运算(arithmetic operator)u关系运算(relational operator)u布尔运算(boolean operator)u位运

27、算(bitwise operator)u字符串运算(string operator)u集合运算(set operator)u指针运算(pointer operator)u类运算(class operator)u取地址操作()运算符的优先级算术运算(arithmetic operator)算术运算符:+, *, /, div(整除), mod(取余)运算量有整型、实型等, div和mod只能是整型,结果类型同运算量。例:5/2 2.55 div2 25 mod 2 15 mod 2 1-5 mod 2 -1-5 mod -2 -1关系运算(relational operator)关系运算符有 =

28、, , , =运算量有简单类型、字符串类型等,结果为布尔类型。例:60=30 true2.54-43.2 falseabcdefalse true布尔运算(boolean operator)布尔运算符有 not, and, or, xor运算量和结果均只能为布尔类型。例:true and false falseflase or (60=30) true位运算(bitwise operator)位运算符有 not, and, or, xor, shl, shr运算量和结果均只能为整型。例:byte(not $ff) $00byte($10 and $11) $10byte( $10 or $1b

29、) $1bbyte( $20 xor $21) $01byte( $10 shl 2) $40byte( $20 shr 1) $10字符串运算(string operator)字符串运算符主要指连接两个字符串的运算符 +例:i am a+ student. i am a student.文件名:+abc.doc 文件名:abc.doc集合运算(set operator)集合运算符有 +(并), - (差), * (交), = (包含), = (相等), (不等), in (成员检查)指针运算(pointer operator)指针运算符有 +, -, =, , 类运算(class opera

30、tor)类运算符有 as, isas:将一个类实例转换为另一个类型的类。如:sender as tbuttonis:用来判断一个类实例的类型,结果为布尔型。如:sender is tcomponet取地址操作()是单目运算符,其作用是返回变量的地址。运算符的优先级, not*, /, div, mod, and, shl, shr, as+, - or, xor=, , , =, in, is高低语句u注释符单行注释符/;多行注释符或(*)u说明语句对数据类型、变量、常量、标号、函数及过程等进行声明的语句,编译后不生成可执行代码。语句以分号结束。u赋值语句和复合语句u选择语句u循环语句uwit

31、h语句赋值语句和复合语句u赋值语句(变量名:=表达式)x := y + z;done := (i = 1) and (i 100);i := sqr(j) - i * k;somearrayi + 1 := p;tmyobject.someproperty := true;u复合语句(把多个语句组合成一个语句)begin z := x; x := y; y := z;end;选择语句uif语句ucase语句ugoto语句if语句if j = 0 then exit /此处不能用;else result := i/j;注:过程exit将终止子程序if j 0 thenbegin result :

32、= i/j; count := count + 1;end /此处不能用;else if count = last then done := true /此处不能用;else exit;if 布尔型表达式 then 语句1 else 语句2case语句case 有序类型表达式 of 选择项1: 语句1; . 选择项n: 语句n;else 语句;end注:各选择项中的值要唯一。case i of 1.5: caption := low; 6.9: caption := high; 0, 10.99: caption := out of range;else caption := ;end;got

33、o语句label starthere /说明一个标号.starthere: beep;goto starthere;注:标号可以是标识符或09999的数。循环语句ufor语句uwhile语句urepeat语句for语句for 有序类型变量:=初值 to 终值 do 语句或for :=初值 downto 终值 do 语句注:有序类型变量的值增(to)减(downto)1,越过终值结束循环。max:=data1;for i := 2 to 12 do if datai max then max := datai;while语句while 布尔表达式 do 语句注:布尔表达式为false结束循环。m

34、ax:=data1;i:=2;while i max then max := datai; i:=i+1;end;repeat语句repeat 语句1; .; 语句2; until 布尔表达式;注:布尔表达式为true结束循环。max:=data1;i:=2;repeat if datai max then max := datai; i:=i+1;until i12;with语句访问记录中的数据域或类中的成员(域,属性或方法)。 with obj do 语句注:指类或记录类型变量的名字,下同。 with obj1, ., objn do 语句或with obj1 do with obj2 d

35、o . with objn do 语句注: obj1, ., objn等分别作用于与其对应的各自成员,可嵌套。举例with语句举例with edit1 do begin text:=时间; /相当于edit1.text:=时间; enable:=false; /相当于edit1.enable:=false; end;with label1,edit1 do begin caption:=label one; /相当于label1.caption:=label one; text:=text one; / 相当于edit1.text:=text one; end;with form1,edit1

36、 do text:=text one; / 相当于form1.edit1.text:=text one;过程和函数u过程u函数u常用过程或函数过程procedure 过程名(形参列表); 过程头类型声明常量声明变量声明过程声明函数声明begin 语句;end;注:作为语句来调用。举例说明部分语句部分过程体过程举例/把整型数转化为字符串procedure numstring(n: integer; var s: string); var v: integer;begin v := abs(n); s := ; repeat s := chr(v mod 10 + ord(0) + s; v :=

37、 v div 10; until v = 0; if n 0 do begin if odd(i) then result := result * x; i := i div 2; x := sqr(x); end;end; /p:=power(2.0,3)常用过程或函数(sysutils或system单元)abs 求绝对值sqr 求平方值sqrt 求平方根sin 求正弦cos 求余弦exp 求e的幂ln 求自然对数pi 3.1415926535897932385date 取日期time 取时间length 求字符串的长度pos 求子串的位置delete 删除子串copy 复制字符串chr a

38、scii值对应的字符 ord 取得序号round 实型四舍五入为整型trunc 实型取整inttohex 整型变为十六进制数串inttostr 整型变为字符串strtoint 字符串变为整型datetostr 日期变为字符串upcase 转化为大写字母uppercase 转化为大写字符串lowercase 转化为小写字符串random 产生一个随机数odd 判定奇数程序和单元举例program 程序名; 程序头uses子句 引用单元类型声明常量声明变量声明过程声明函数声明begin 语句;end. 程序结束说明部分语句部分程序体程序举例program editor; /程序对应的文件名(.dp

39、r)必须与程序名相同。uses forms, reabout in reabout.pas aboutbox, remain in remain.pas mainform; $r *.res /编译指示begin application.title := text editor; application.createform(tmainform, mainform); application.run;end.单元unit 单元名; 单元头interfaceuses子句 引用其它单元 接口部分implementation uses子句 引用其它单元 实现部分initialization 初始化代

40、码finalization 结束代码end. 单元结束举例单元举例unit unit1; /单元对应的文件名(.pas)必须与单元名相同interfaceuses windows, messages, sysutils, classes, graphics, controls, forms, dialogs;type tform1 = class(tform) button1: tbutton; procedure button1click(sender: tobject); private private declarations public public declarations end

41、;var form1: tform1;implementation$r *.dfmprocedure tform1.button1click(sender: tobject);begin close;end;end.本节要点(1.2)u会使用delphi的帮助系统(object pascal reference主题)查阅object pascal的各语法要素u逐渐熟悉object pascal的常用数据类型、变量、常量、运算符和表达式,并掌握它们的用法。u熟悉各语句的格式和用法,并使用本讲稿中的各示例编写完整程序,来验证各语句的用法。u逐渐掌握过程和函数的编写和调用。u熟悉程序和单元的结构。练

42、习(1.2)u理论教程p28-30选择题1-5,简答题2-3u上机实训教程1.3,1.4补充:使用delphi编写一实现排序功能的程序。演示1.3 delphi 中的程序调试及异常处理u程序调试u异常处理本节要点练习程序调试u程序设计中的错误类型u设置编译选项u控制程序的执行u使用监视列表窗口(watch list, ctrl+f5)u使用求值/修改对话框(evaluate/modify, ctrl+f7)程序设计中的错误类型u设计期错误u编译期错误u运行期错误u逻辑错误 设计期错误 这一类型的错误较容易发现和纠正,因为delphi能对特定的值进行合法性检查,发现这类错误,delphi将显示一

43、个警告窗口,以提示用户纠正错误。 这种错误类型发生在使用delphi进行可视化设计的时候,通常是因为给组件的某个属性输入了非法的值。例如按钮组件tbitbtn的numglyphs属性取值为 1.4,若输入的值不在此范围,则发生错误。编译期错误 编译期错误也称为语法错误。在delphi中,通常是当程序代码违反了object pascal语言的语法规则时发生这类错误。比较常见的语法错误有标识符未定义或拼写错误;语句的末尾漏掉分号;赋值语句中漏写昌号;begin与end末配对;括号末配对;引号末配对等。 如果程序代码中有语法错误,编译不能通过,代码编辑器的状态行将给出错误信息提示,并加亮有语法错误的

44、代码行。运行期错误 程序虽然通过了编译,但运行失败,这种错误称为运行期错误,例如应用程序试图打开一个不存在的文件,或者运算时出现被零除等情况。 delphi能够检测出这类错误,并退出当前模块。此时,如果不能确定错误发生在什么地方,可以用delphi内部集成的调试器查找错误的位置。例如可以用单步执行命令,让程序一条语句一条语句地执行,或者添加一个监视窗口,观察某个变量的变化情况。逻辑错误举例 逻辑错误是指程序通过了编译,也能执行,但执行的结果跟预期的不同。 逻辑错误有时比较难找,因为delphi不能自动识别这类错误。这时就需要用到内部集成的调试器,通过控制程序的运行、监视程序的输出或观察变量的值

45、,把错误逐步定位在一个较小的范围内。举例(逻辑错误)编程实现符号函数的功能 :var x,y:real;begin x:=-2; y:=0; if x=0 then if x0 then y:=1 else y:=-1; showmessage(floattostr(y);end;设置编译选项 设置编译选项用来控制delphi程序的编译方式。 可以使用如下二种方法进行设置:(1)使用delphi菜单project/options-compiler(2)在程序中加$z+或$z-设置或清除编译选项,其中z为编译开关字母。 建议,在程序调试时,将所有检查性的选项设置上,优化特性清除,以利于调试;当程

46、序调试通过后,应把那些加重程序时间、空间负担的编译开关清除,设置优化代码功能,再编译一次,以生成简练的可执行文件。编译选项1代码生成(code generation) 选 项 说 明 字母 optimization 编译时启动优化功能:如把循环变量放入cpu的寄存器中,对重复出现的表达式只求一次值等 o stack frames 强制编译器为每个过程和函数产生一个堆找结构,这主要是为调试某些程序设置的 w pentium-safe fdiv 自动生成检测错误浮点除法的代码 u record field alignment 让变量地址都为1,2,4,8 的整数倍数,以提高cpu对内存访问的速度

47、a 编译选项2运行时的错误(runtime errors) 信息(messages) 选 项 说 明 字母 range checking 检查数组或字符串类型的下标范围是否越界 r i/o checking 在每次i/o调用后检查是会有io错误 i overflow checking 检查整数操作是否溢出 q 选 项 说 明 show hints 使编译器显示提示信息 show w arnings 使编译器显示警告信息 编译选项3语法选项(syntax options)选 项 说 明 字母 strick var-strings 设置字符串参数的错误检查, 要求形参与实参类型必须严格一致(若 o

48、pen parameters 选项被选中,此项无效) v complete boolean eval 计算完逻辑表达式的所有项后计算整个逻辑表达式的值。 当不选此项, 且逻辑表达式的值能确定时,后面的项就不计算了。如无特殊要求此项通常不选 b extended syntax 用 delphi 的扩展语法,允许忽略函数的返回值,而像使用过程一样使用函数;同时也支持 pchar 类型 x type operator 使由操作符返回的指针只与指向同类型变量的指针兼容 t open parameters 允许在过程及函数的声明中使用开放式的字符串参数 p huge strings 使关键字 strin

49、g 对应新的 ansistring 类型(否则只对应shortstring 类型) h assignable typed constants 编译器允许程序修改类型常量的值。 此选项是为了兼容早期的 delphi 和 pascal 版本而设置的 j 编译选项4调试(debugging) 举例选 项 说 明 字母 debug information 把调试信息放入单元文件(.dcu)里 d local symbols 生成局域变量信息 l reference info /definitions only 生成符号索引信息。若此二项均被选中,编译器记录下各标识符的定义位置,使代码浏览器工作。若只有

50、reference info被选中, 编译器记录下标识符定义和使用位置的信息。除非 debug information和 local symbols都被选中,否则此二选项均无效 y assertions 在程序代码中插入断点代码 c use debug dcus 允许链接调试版本的vcl 举例(range checking)$r+或$r-var a:array 1.3 of byte; i:integer;begin for i:=1 to 4 do begin ai:=i; showmessage(inttostr(ai); end;end;控制程序的执行u设置断点(toggle break

51、point/f5)u执行到光标处(run to cursor/f4)u单步执行(trace into/f7,step over/f8)举例举例(控制程序的执行)编程实现符号函数的功能 :var x,y:real;begin x:=-2; y:=0; if x=0 then if x0 then y:=1 else y:=-1; showmessage(floattostr(y);end;异常处理udelphi对异常的自动处理u编程人员对异常的处理tryexcept语句raise语句tryfinally语句u自定义异常类及其使用delphi对异常的自动处理 delphi为应用程序提供了一套缺省的

52、自动异常处理机制,即当前模块发生错误后退出当前模块并给出错误信息,而并不立即引起应用程序的中止。 若程序在delphi的集成开发环境中运行,在给出相应错误信息的同时,还尽可能定位出错的位置。例如:var i:integer; r:real;begin i:=0; r:=8 / i; showmessage(floattostr(r);end;tryexcept语句(格式1)格式1:try 语句except 语句end;功能: 若执行try与except之间的语句发生异常,则执行except与end之间的语句对该异常作出处理,并清除异常,否则(没有异常)跳过except与end之间的语句。举例举

53、例(格式1)举例:var i:integer; r:real;begin i:=0; try r:=8/i; showmessage(floattostr(r); except showmessage(除数为零); end;end;tryexcept语句(格式2)格式2:try 语句except on 标识符: 异常类 do 语句 on 标识符: 异常类 do 语句 end;功能: 当执行try与except之间的语句发生异常时,依次查找on后的异常类,直到发现某个匹配的异常类即执行其do后语句,并清除异常,然后跳过try与except结构,执行end后的语句。 若在on后没有找到匹配的异常类

54、,则异常仍然存在。举例举例(格式2)var i,j:integer; r:real;begin j:=20; try i:=strtoint(edit1.text); j:=10 div i; r:=10/(i-1); showmessage(正常,j=+inttostr(j)+,r=+floattostr(r); except on e:econverterror do showmessage(异常,非数值+#13+e.message); on edivbyzero do showmessage(异常,整数被0除); on ezerodivide do showmessage(异常,实数被0

55、除); end;end;tryexcept语句(格式3)格式3:try 语句except on 标识符: 异常类 do 语句 on 标识符: 异常类 do 语句 else 语句end;功能: 当执行try与except之间的语句发生异常时,依次查找on后的异常类,直到发现某个匹配的异常类即执行其do后语句,若在on后没有找到匹配的异常类,则执行else后的语句,并清除异常。举例举例(格式3)var i,j:integer; r:real;begin j:=20; try i:=strtoint(edit1.text); j:=10 div i; r:=10/(i-1); showmessage(正常,j=+inttostr(j)+,r=+floattostr(r); /raise exception except on e:econverterror do showmessage(异常,非数值+#13+e.message); else showmessage(异常,除数为0); end;end;raise语句在except后语句处理了异常,则清除异常,但可在其后使用raise重新产生该异常,再提供给外层try来处理。var i:integer; r:real;begin i:=0; try r:=8/i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论