第7章异常处理与程序调试技术(精)

合集下载

07第七章 游标和异常处理

07第七章 游标和异常处理
第七章 游标和异常处理
By esoft_zsx@ Version 3.0 Oct 2009
Oracle 10g
1-1 Copyright © ESOFT, 2009. All rights reserved.
课程内容
• • • • 游标的概念 隐式游标 显式游标 异常处理
Oracle 10g
Oracle 10g
1-12 Copyright © ESOFT, 2009. All rights reserved.
下面对这两种格式进行说明: 第一种格式中的变量名是用来从游标中接收数据 的变量,需要事先定义。变量的个数和类型应与 SELECT语句中的字段变量的个数和类型一致。 第二种格式一次将一行数据取到记录变量中,需 要使用%ROWTYPE事先定义记录变量,这种形式使用 起来比较方便,不必分别定义和使用多个变量。 定义记录变量的方法如下: 变量名 表名|游标名%ROWTYPE; 其中的表必须存在,游标名也必须先定义。
Oracle 10g
1-19 Copyright © ESOFT, 2009. All rights reserved.
DBMS_OUTPUT.PUT_LINE(v_ename||','||v_sal); END LOOP; CLOSE emp_cursor; END; 执行结果为: KING,5000 SCOTT,3000 FORD,3000 PL/SQL 过程已成功完成。 说明:该程序在游标定义中使用了ORDER BY子 句进行排序,并使用循环语句来提取多行数据。
Oracle 10g
1-21 Copyright © ESOFT, 2009. All rights reserved.
FOR Emp_record IN emp_cursor LOOP DBMS_OUTPUT.PUT_LINE(Emp_record.empno|| Emp_record.ename); END LOOP; END;

Java开发基础 PPT课件

Java开发基础 PPT课件

大纲
接口与抽象类的选择
☞ 克隆及其注意事项
接口与回调 内部类、局部类、匿名类 JDK的Proxy与CGLib的动态代理区别
克隆及其注意事项
浅克隆与深克隆
默认实现是浅克隆(本地方法实现)(java.util.AbstractMap默 认实现是浅克隆)
如果原始对象与浅克隆对象共享的子对象是不可变的,则不 会产生负面问题。
反射
允许程序在运行时透过Reflection APIs取得任何一个已知名称的class 的内部信息,并可于运行时改变fields内容或唤起 methods。
可动态获取的内容包括
modifiers(诸如public, static ) superclass(例如Object) interfaces(例如Cloneable fields和methods等
的属性 Java 中所有的对象都继承至 ng.Object ,因此都拥有
toString() , equals() ,wait() 等方法
继承的约束
不能实现多继承 父类提供了参数构造函数,子类必须实现 子类不能降低父类方法的可见域 子类不能抛出比父类构造函数或方法更多的异常 子类不能扩展父类的 final 方法
象类不应该依赖于其细节,细节。 接口隔离原则(ISP):不应该强迫客户依赖于它们不用的方

类设计基本原则(续)
包设计的基本原则
包内聚性原则(包粒度) 重用发布等价原则(REP):重用的粒度就是发布的粒度。 共同重用原则(CRP):一个包中的所有类应该是共同重用的。 如果重用了包中的一个类,那么就要重用包中的所有类。 共同封闭原则(CCP):包中的所有类对于同一类性质的变化应 该是共同封闭的。一个变化若对一个包产生影响,则将对该包中 的所有类产生影响,而对于其它的包不造成任何影响。 考虑可重用性与可开发性的平衡。

第七章_调试和错误处理

第七章_调试和错误处理
Console.WriteLine(e); } Finally { //都要执行。 }
• 进入中断模式的方法
– 设置断点 – 设置断定语句 – 处理程序异常
在 VS 2008 中调试应用程序
• 中断模式的调试方法
– 监视变量的内容 – 单步执行代码 – 使用即时窗口和命令窗口
在 VS 2008 中调试应用程序
• 异常处理
– 错误处理是用处理程序运行过程中可能会为 生的错误的,它可以用来处理如下错误:
在 VS 2008 中调试应用程序
• 异常处理的方法
try { <语句组>; } catch (<异常类型> <异常变量>) { <异常处理代码>; } catch (<异常类型> <异常变量>) { <异常处理代码>; } finally { <清理代码>; }
在 VS 2008 中调试应用程序
调试和错误处理(重要 重要) 第七章 调试和错误处理 重要
为什么需要调试程序
• 由于人思维的局限性,很难保证人编写 的程序不出现任何错误,即使是非常优 秀的程序员也无法保证代码不出现问题。 • 据统计,在编码过程中,有40%的时间 花在编写代码上,而另外60%的时间却 是花在程序的调试(bug)上的。 • 因此,对代码进行调试,是软件开发人 员的一项日常工作。
在 VS 2008 中调试应用程序
• Debug与Trace的的用法
– Debug
Debug.Write(<调试信息 调试信息>); 调试信息 Debug.WriteLine(<调试信息 调试信息>); 调试信息
– Trace

尚硅谷_宋红康_第7章_异常处理

尚硅谷_宋红康_第7章_异常处理

7.3 异常处理机制一
捕获异常的有关信息:
与其它对象一样,可以访问一个异常对象的成员变量或调用它的 方法。
getMessage() 获取异常信息,返回字符串 printStackTrace() 获取异常类名和异常信息,以及异常出
现在程序中的位置。返回值void。
异常名称
说明信息
堆栈信息
7.3 异常处理机制一
...... //当产生ExceptionName1型异常时的处置措施 } catch( ExceptionName2 e ){ ...... //当产生ExceptionName2型异常时的处置措施 } [ finally{ ...... //无论是否发生异常,都无条件执行的语句 }]
7.3 异常处理机制一
7.3 异常处理机制一
异常的抛出机制
为保证程序正常执行,代码必须对可能出现的异常进行处理。
7.3 异常处理机制一
如果一个方法内抛出异常,该异常对象会被抛给调用者方法中处 理。如果异常没有在调用者方法中处理,它继续被抛给这个调用 方法的上层方法。这个过程将一直继续下去,直到异常被处理。 这一过程称为捕获(catch)异常。
finally语句和catch语句是任选的
7.3 异常处理机制一
7.3 异常处理机制一:举例
public class IndexOutExp { public static void main(String[] args) { String friends[] = { "lisa", "bily", "kessy" }; try { for (int i = 0; i < 5; i++) { System.out.println(friends[i]); } } catch (ArrayIndexOutOfBoundsException e) { System.out.println("index err"); } System.out.println("\nthis is the end"); }

《Python程序设计方案》习题与答案

《Python程序设计方案》习题与答案

《Python程序设计》习题与参考答案第1章基础知识 简单说明如何选择正确的 ⍓♦♒☐⏹版本。

答:在选择 ⍓♦♒☐⏹的时候,一定要先考虑清楚自己学习 ⍓♦♒☐⏹的目的是什么,打算做哪方面的开发,有哪些扩展库可用,这些扩展库最高支持哪个版本的 ⍓♦♒☐⏹,是 ⍓♦♒☐⏹ ⌧还是 ⍓♦♒☐⏹ ⌧,最高支持到 ⍓♦♒☐⏹ 还是 ⍓♦♒☐⏹ 。

这些问题都确定以后,再做出自己的选择,这样才能事半功倍,而不至于把大量时间浪费在 ⍓♦♒☐⏹的反复安装和卸载上。

同时还应该注意,当更新的 ⍓♦♒☐⏹版本推出之后,不要急于更新,而是应该等确定自己所必须使用的扩展库也推出了较新版本之后再进行更新。

尽管如此, ⍓♦♒☐⏹ 毕竟是大势所趋,如果您暂时还没想到要做什么行业领域的应用开发,或者仅仅是为了尝试一种新的、好玩的语言,那么请毫不犹豫地选择 ⍓♦♒☐⏹ ⌧系列的最高版本(目前是 ⍓♦♒☐⏹ )。

 为什么说 ⍓♦♒☐⏹采用的是基于值的内存管理模式?答:⍓♦♒☐⏹采用的是基于值的内存管理方式,如果为不同变量赋值相同值,则在内存中只有一份该值,多个变量指向同一块内存地址,例如下面的代码。

 ⌧   ♓♎☎⌧✆ ⍓   ♓♎☎⍓✆ ⍓   ♓♎☎⍓✆ ♓♎☎⌧✆ 在 ⍓♦♒☐⏹中导入模块中的对象有哪几种方式?答:常用的有三种方式,分别为●♓❍☐☐❒♦ 模块名 ☯♋♦ 别名●♐❒☐❍ 模块名 ♓❍☐☐❒♦ 对象名☯ ♋♦ 别名●♐❒☐❍ ❍♋♦♒ ♓❍☐☐❒♦ ✉ 使用☐♓☐命令安装⏹◆❍☐⍓、♦♍♓☐⍓模块。

答:在命令提示符环境下执行下面的命令:☐♓☐ ♓⏹♦♦♋●● ⏹◆❍☐⍓☐♓☐ ♓⏹♦♦♋●● ♦♍♓☐⍓ 编写程序,用户输入一个三位以上的整数,输出其百位以上的数字。

Java语言程序设计7-1-java第7章(文件数据流)

Java语言程序设计7-1-java第7章(文件数据流)
例题的执行结果
在屏幕上显示文字时需要注意的事项: 在屏幕上显示文字时需要注意的事项: FileReader.read()函数返回整型数,显示时必 函数返回整型数, 函数返回整型数 须把它强制转换成字符类型 如果不转换,显示结果如下: 如果不转换,显示结果如下:
软件学院
7.1 写入和读出数据文件
二进制数据文件的读写
DataInputStream in1 = new DataInputStream(file1); DataOutputStream out1 = new DataOutputStream(file2);
软件学院
7.1 写入和读出数据文件
3.用DataInputStream类读出数据 用 类读出数据
FileInputStream file1 = new FileInputStream("save1.dat"); FileOutputStream file2 = new FileOutputStream("save2.dat");
软件学院
7.1 写入和读出数据文件
2.创建文件读写对象 创建文件读写对象
while (aChar != '\u0000') { str.append(aChar); aChar = in1.readChar(); }
软件学院
7.1 写入和读出数据文件
5.关闭文件 关闭文件
在读取或写入文件之后, 在读取或写入文件之后,同样应当调用文件读写对 象的close函数关闭文件 象的 函数关闭文件 在写入文件时,内容往往只写在缓存里, 在写入文件时,内容往往只写在缓存里,只有在关 闭文件时才会真正将内容写入 关闭文件的代码如下: 关闭文件的代码如下:

酒店管理管理系统java课程设计

酒店管理管理系统java课程设计

酒店管理管理系统java课程设计一、课程目标知识目标:1. 学生能够理解酒店管理系统的业务流程和功能需求。

2. 学生能够掌握Java语言面向对象编程的基本概念,包括类、对象、继承、封装和多态。

3. 学生能够运用Java集合框架处理酒店管理系统中数据存储与检索。

4. 学生理解并掌握Java异常处理机制,提高程序的稳定性和可靠性。

5. 学生能够运用Java事件处理机制实现用户界面与酒店管理系统的交互。

技能目标:1. 学生能够独立设计并编写酒店管理系统的功能模块。

2. 学生能够运用集成开发环境(IDE)进行代码编写、调试和优化。

3. 学生能够通过编写代码实现酒店管理系统的模块测试和系统集成。

4. 学生能够运用软件工程方法,编写技术文档,对系统设计进行说明。

情感态度价值观目标:1. 学生通过课程学习,培养对酒店管理行业信息化的认识和兴趣。

2. 学生在团队协作中,学会沟通与交流,提高解决实际问题的能力。

3. 学生在学习过程中,养成积极思考、主动探索的良好习惯,增强自主学习能力。

4. 学生能够认识到编程在酒店管理系统开发中的实际应用,提高职业素养和社会责任感。

二、教学内容1. 酒店管理系统的业务需求分析,涉及客户管理、房间管理、预订管理、入住退房管理等模块。

2. Java面向对象编程基础,包括类与对象、构造方法、访问控制、继承与多态。

- 教材章节:第三章《Java面向对象编程》。

3. Java集合框架的使用,如List、Set、Map等数据结构在酒店管理系统中的应用。

- 教材章节:第五章《Java集合框架》。

4. Java异常处理机制,捕获和处理程序运行时的异常。

- 教材章节:第七章《Java异常处理》。

5. Java事件处理和图形用户界面设计,实现酒店管理系统的交互界面。

- 教材章节:第十章《Java图形用户界面编程》。

6. 数据库连接和SQL语句,实现酒店管理系统中数据的存储和查询。

- 教材章节:第八章《数据库编程》。

第7章 调试、测试和异常处理PPT教学课件

第7章 调试、测试和异常处理PPT教学课件
第7章 调试、测试和异常处理
• 每一个应用程序开发出来,交给客户使用前都要进行检查, 确保其没有错误并且安全可靠,才能交付使用。任何软件 都不能保证完全没有错误,程序员应尽力去发现其中的错 误并修正这些错误。发现并消除错误的过程就是调试。如 果程序调试通过,就要检测该软件是否符合用户需求,软 件中是否包含未发现的错误,这个过程成为测试。在编写 程序过程中,有些错误是可以预测到的,有些是预测不到 的,对于可预测的错误C#提供了异常处理机制,保证程序 的正确性和可靠性。本章将详细讨论C#中的调试、测试和 异常处理方法。主要内容如下:
• 这个例子中,感冒就是一个异常,因为预先考虑 到可能出现的问题,进行了合适的处理,这就是 异常处理。适当的异常处理可以避免系统终止当 前操作,程序不会出现故障,系统也不会崩溃。
7.3.2 异常类
• .NET提供了大量与异常有关的类,用来处理异常, 每一个异常类都表示一种异常,Exception类是所 有异常的基类。异常类继承关系的结构图如图7.8 所示。
• 在消除了程序中的语法错误和运行时错误后,程序依旧不 能保证完全正确,程序员可以自己进行简单的单元测试, 来确定基本功能是否完善,复杂的测试有专业测试人员进 行。什么是单元测试呢?
• 单元测试是测试隔离的单元或模块,对各种方法分别使用 不同的输入和执行参数来测试。单元测试的依据是详细设 计描述,单元测试应对模块内所有重要的控制路径设计测 试用例,以便发现模块内部的错误。单元测试多采用白盒 测试技术,系统内多个模块可以并行地进行测试。VS2008 将单元测试工具集成在IDE中,方便程序员的使用,下面通 过一个简单的例子来说明VS2008中单元测试工具的使用。
7.3 异常处理
• 利用调试和测试,可以有效地减少程序中的错误, 但是程序中的错误是不可避免的,就像人难免会 生病一样。错误是客观存在的,程序员有责任和 义务尽量减少错误的发生。面对不可避免的、可 能出现的错误,如何积极面对,以保证程序的稳 定可靠,具有非常重要的意义。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第7章异常处理与程序调试技术
第1节异常处理概述
一、异常的概念
所谓异常是指程序在运行时遇到的一些无法预知,需要特别处理的状况。

例如程序要打开一个不存在的文件、网络连接中断、操作数越界、装载一个不存在的类等问题。

二、Delphi的异常处理机制
Delphi提供了一套默认的自动异常处理机制,即当程序发生错误后会自动退出当前运行的程序模块,并以对话框的形式给出相应的错误信息,但是并不会引起应用程序的非法终止。

Delphi的异常处理机制是建立在保护块的概念上的。

保护块是用保留字try和end封装起来的一段代码。

当应用程序发生错误时,系统会自动创建相应的异常类的对象,该异常对象通常包含了错误的相关信息。

程序可以捕获并处理这个异常对象,如果程序中没有定义对该异常的处理,则系统会自动产生一个消息框来描述这个错误,并保证程序不会非法终止。

三、异常类
在Delphi中,所有的异常类都派生自Exception类,该类是在SysUtils单元中定义的,如果一个程序的Uses语句中包含了SysUtils单元,则运行中发生错误时就会引发一个异常。

需要注意的是,异常不同于错误,编程者可以引发一个自定义异常。

例如:
Raise Exception.Create('My Error');
第2节异常处理的语法
Delphi提供了两种处理异常的基本结构:try…except和try…finally。

前者主要用于编写异常处理代码,后者主要用于保护系统资源。

一、try…except…end
try…except…end形成一个异常响应保护块。

正常情况下except后面的语句并不会被执行,而当一条或多条try块中的语句执行失败时,则发生异常,程序自动跳到except块中,进入异常响应处理模块中去执行。

当异常被响应后异常类自动清除。

二、try…except on…do… end
这种异常响应保护块通过使用on…do来响应不同类型的异常,其中on之后为异常的类型。

例如:
var
I,J,K: Integer;
begin
Try
I:=StrToInt(Edit1.Text);
J:=StrToInt(Edit2.Text);
K:=I div J;
Edit3.Text:=IntToStr(K);
Except
On EDivByZero do
ShowMessage(‘除数为0!');
On EConvertError do
ShowMessage('数据类型错误!');
end;
end;
说明:
①如果未编写异常处理结构,当发生异常时,VCL将调用默认的异常处理程序,通常会显示一个消息框,显示与对应的异常有关的错误信息。

②即使为可能出现的异常编写了t ry…except结构,在Delphi开发环境中运行调试程序时,系统仍然会在出现异常的代码处中断程序运行(此时可执行菜单命令【Run | Program Reset】返回设计状态)。

对于这样的程序,可先编译、保存,然后直接执行编译后的可执行文件。

③父类异常可以对子类异常做出响应。

例如,Exception类可以响应所有异常。

如果在except块中含有多行on...do子句,应注意它们的继承层次关系。

若各子句中的异常类之间存在直系继承关系,应将后代子句置前,祖先子句置后。

否则,处于低层次的异常子类处理子句将不被执行。

三、try…finally…end
显示错误消息是异常处理的一个方面,当错误发生时,还应该保证系统的稳定,如及时释放已经分配的资源,避免系统的崩溃等,可以采用try…finally…end结构实现。

Finally 之后的语句无论如何都会被执行,因此可以用于资源保护。

例如,以下程序段存在缺陷:
var
P:Pointer;
I,J:integer;
Begin
I:=0;
GetMem(P,2048); //为指针P分配2K内存
J:=5 div I;
FreeMem(P,2048); //释放为指针P分配的内存
End;
当运行到语句“J:=5 div I;”时,因I=0会产生被0除的异常。

此时程序会从异常发生点退出当前程序块,FreeMem语句没有执行的机会,从而导致为指针P分配的内存未被释放。

采用try…finally…end结构可解决此问题:
var
P:Pointer;
I,J:integer;
Begin
I:=0;
GetMem(P,2048);
Try
J:=5 div I;
Finally
FreeMem(P,2048);
End;
End;
与t ry…except结构不同,无论是否发生异常,finally块中的语句均会执行,从而保护系统资源。

四、资源保护与异常处理的结合
t ry…finally结构用于保护资源,但不对异常进行任何处理。

可以将t ry…except和t ry…finally结构相结合,构成嵌套的try结构,既处理异常,又保护资源。

一般格式如下:... //分配资源
try
try
... // 可能引发异常的语句
except
...//异常处理语句
end;
finally
{释放资源};
end;
例如:
var
x, y: Integer;
A: array of Extended; //声明动态数组
begin
x := 1;
y := 0;
SetLength(A,1); //为动态数组分配内存
try
try
A[0] := x / y; //此句将引发异常
except
ShowMessage('除数不得为0!'); //处理异常
end;
finally
A := nil; //释放资源
end;
end;
五、自定义异常
自定义异常同定义新的类相似,只是Delphi中异常的基类是Exception类,因此,自定义异常的语法通常如下:
type
异常类名=class(Exception)
要引发该异常,可以使用如下方法:
Raise 异常类对象名(参数);
第3节程序调试
一、程序中的错误
程序中的错误可以分成三类:语法错误、运行时错误和逻辑错误。

语法错误:语句不符合语法规范。

如:begin和end不匹配、句末漏掉分号、标识符未声明、数据类型不符等。

运行时错误:程序通过编译,但执行时发生错误。

如:试图打开一个不存在的文件、被0除等。

程序执行到该语句时,Delphi的集成调试环境会自动停止程序执行,并显示错误信息对话框。

单击对话框中的OK按钮后,系统便回到源程序中出错的地方。

逻辑错误:程序可以通过编译并运行,但结果和期望不同。

二、程序运行方式
RUN:单击Run|Run菜单项或工具栏上的运行按钮或快捷键F9。

这时,系统会自动编译该程序。

如果程序中没有语法错误,则执行该程序。

Compile:选择Project|Compile菜单项或按Ctrl+F9,编译程序会编译包括.dpr在内的全部改动过的文件,并生成.exe文件,但不会运行程序。

如果程序中有语法错误,编译程序就能找出来。

Build:选择Project|Build菜单项,编译程序会编译项目中的所有文件,无论它们是否被改动。

Project|Compile All Projects和Project|Build All Projects:在使用项目组时使用,编译项目组中的所有项目。

三、断点的使用
断点必须设置在可执行语句上,程序运行到断点时会自动停下,回到调试监控模式,此时断点处的语句尚未执行。

可以用单步执行的方式观测各变量的值,从而检查程序的出错点的位置。

设置方法:单击需设置断点的行左侧的灰色区域。

再次单击则取消断点。

四、运行到光标处
将光标移到目标位置,按F4键。

五、单步调试
常用的单步调试方法如下:
Trace Into(按F7键):当程序运行到调用自定义函数、过程时,Trace Into方式会进入到子程序内部跟踪,并停留在子程序的第一行代码处。

当程序执行到子程序的结束处时,就返回主程序中。

但是,这种方法不会进入Delphi提供的库函数内部进行跟踪。

Step Over(按F8键):每次只执行一行程序,当遇到自定义函数或过程的调用时,不会进入函数进行进一步的跟踪,而是直接把函数执行完毕,再停在程序的下一行。

如果能够确信自定义函数无错时,使用Step Over方法比Trace Into方法更能简化调试工作。

六、观察窗(WatchList)
观察窗是监控程序执行的工具之一,利用它和前面的各种执行方式相配合,可以检测各个变量及表达式在程序执行的某个阶段的值。

练习
1. 练习处理异常
参考教材【例7-2】,练习处理异常。

2. 练习使用断点和观察窗
按照习题7.4的要求,练习使用断点和观察窗调试程序。

相关文档
最新文档