项目一计算器

上传人:cl****1 文档编号:571067008 上传时间:2024-08-08 格式:PPT 页数:111 大小:1.61MB
返回 下载 相关 举报
项目一计算器_第1页
第1页 / 共111页
项目一计算器_第2页
第2页 / 共111页
项目一计算器_第3页
第3页 / 共111页
项目一计算器_第4页
第4页 / 共111页
项目一计算器_第5页
第5页 / 共111页
点击查看更多>>
资源描述

《项目一计算器》由会员分享,可在线阅读,更多相关《项目一计算器(111页珍藏版)》请在金锄头文库上搜索。

1、项目一 计算器任务一:任务一:完成简单计算器的程序设计,能够通过控制台实现两个数的加、减、乘、除。本节目标:掌握变量、标识符的定义;掌握简单数据类型的使用;掌握各种运算符的使用; 变量的定义变量的定义 变量是Java程序中存储数据的基本单元。声明变量的语法为:数据类型 变量名=值,标识符=值;Java中的所有变量都必须声明后才能使用。通过将标识符用逗号隔开可以声明多个变量,变量区分大小写。标识符标识符 用来标识类名、变量名、方法名、类型名、数组名、文件名的有效字符序列称为标识符。Java语言规定标识符由字母、数字、下划线“_”和美元符号“$”组成,并且第一个字符不能是数字符号。Java语言中的

2、标识符是严格区分大小写的。关于标识符的另一个重要限制是,不能使用Java语言的关键字。Java标识符的长度没有任何限制。基本数据类型基本数据类型 变量变量声明由以下三个部分组成:数据类型名称要赋给的初始值(可选) 语法:数据类型 标识符 =值, 标识符=值;标识符标识符必须以字母,下划线“_”或“$”符号开头。首字母后面可以跟任意数量的字母,数字,下划线“_”或“$”符号。可以包含数字,但不能以数字开头。不能使用Java关键字。判断下列变量名是否合法:Myvariable9pinsa+c_9pins -9pins数据转换类型自动类型转换强制类型转换q将一种类型的变量赋给另 一种类型的变量时,只

3、要 满足以下条件,就会发生 自动类型转换:q两种类型兼容;q目标类型大于源类型;q强制转换用于显式类型 转换。如果被转换的值 的数据类型大于其目标 类型,就会丢失部分信 息类型强制转换类型强制转换使程序将变量视为某种类型,尽管此变量中包含的是另一类型的数据 示例:float c = 34.89675f;int b = (int) c + 10; / 将 c 转换为整型算术运算符算术运算符 赋值运算符赋值运算符 关系运算符关系运算符 逻辑运算符逻辑运算符 编写程序实现Xn,n!。本节目标:掌握Java语言中的各种流程控制语句的使用。 任务二:任务二:控制流语句的类型判断语句判断语句if-else

4、 语句switch-case 语句循环语句循环语句while 循环do-while 循环for 循环if-else 语句If-else 语句测试条件的结果,然后根据此结果来执行相应的操作它可用于以两个不同的路径来执行程序if-else 语句的语法为:if (condition)action1;elseaction2;switch-case 语句switch-case 语句可用于替换 if-else-if 语句在表达式可以得出多个值的情况下,使用此语句使用 switch-case 语句会带来更好的效果switch-case 语句的语法为: switch (表达式) case 1: 操作 1 的语

5、句; break; case 2: 操作 2 的语句; break; . case n : 操作 n 的语句; break; default: 默认语句; 循环 3-1while 只要指定的条件评估为 true,while 循环则执行一个 语句或一组语句语法语法int count = 0; while (count 10) System.out.println(count); count+;示例示例while (测试) / 语句 被执行被执行条件 = true循环 3-2do-whiledo-while 循环执行某些语句,直到指定的条件为真。此循环确保循环体至少执行一次语法do System.

6、out.println(count); count+; while (count 10)示例do / 语句 while (测试)被执行被执行条件条件 = true循环 3-3forfor 循环主要用于按预定的次数执行语句或语句块语法for(count = 0; count 10; count+) System.out.println(count);示例for(初始化;测试; 增量) 操作语句;条件 = true被执行跳转语句2-1两种跳转语句为:breakcontinuebreak 语句:用于终止块。continue 语句:有时程序员可能希望继续循环,而停止处理其主体内的其余代码,以进行特定的

7、迭代。continue 语句可用于这种操作。运用面向对象的思想,编写计算器类,并定义加、减、乘、除四个方法。本节目标:掌握类和对象的声明;掌握类的继承实现;掌握类的覆盖和重载的区别和使用。 任务三:任务三:面向对象编程OOPOOP旨在在计算机程序中模拟现实世界中的概念在 OOP中,现实世界的所有事物全都被视为对象能够在计算机程序中用类似的实体模拟现实世界中的实体设计和实现软件系统的方法对象对对对对 象象象象面向对象编程的核心为计算机应用程序提供实用基础完成特定任务表示现实世界中的实体“对象是存在的具体实体,具有明确定义的状态和行为。对象是存在的具体实体,具有明确定义的状态和行为。”类类以共同特

8、性和操作定义实体类是用于组合各个对象所共有操作和属性的一种机制形状类形状类动物类动物类汽车类汽车类类的示例类的示例“类是具有相同属性和行为的一组对象的集合类是具有相同属性和行为的一组对象的集合”属性事物的特性在类中表示为变量每个对象的每个属性都拥有其特有的值属性名称由类的所有实例共享住址住址姓名姓名属性属性年龄年龄“在类中表示对象或实体拥有的特性时称为属性在类中表示对象或实体拥有的特性时称为属性”促销员对象促销员对象在 Java 中实现类 语法语法class 其中,class 是创建类所使用的关键字, 是类的名称, 包含属性和方法的声明。类中的方法 6-1方法的定义方法的定义方法的名称参数列表

9、方法的主体方法返回的对象类型或原始类型类中的方法 6-2语法 ( , ,) 其中, 是方法返回值的数据类型 是用户自定义的方法名称方法的参数列表是一组变量声明。类中的方法 6-5实例方法可使用圆点符号来访问方法被调用的对象在圆点左边,而方法的名称在圆点右边例如: Obj.isAvailable();this 关键字用于任何实例方法内,指向当前对象this 的值指向对其调用当前方法的对象 this 关键字可在需要当前类类型的对象引用时使用 构造方法每当创建给定类的实例时就调用的方法与类同名,但没有返回类型Java 为对象分配内存,初始化实例变量并调用构造方法两种构造方法参数化构造方法隐式构造方法

10、继承父父 类类 子类子类 父类父类/ /子类是子类是相对的相对的Cow类Lion类Tiger类类Animals类Carnivorous类Herbivorous类Coat类继承的特点继承的特点继承的特点具有层次结构子类继承了父类的非私有属性和方法继承的优点继承的优点继承的优点代码的可重用性父类的属性和方法可用于子类设计应用程序变得更加简单可以轻松地自定义子类子类构造方法 2-1子类构造方法的名称与类的名称相同先调用父类构造方法,再调用子类构造方法要调用父类构造方法,使用关键字 super子类构造方法 2-2调用父类构造方法的语法为:super() 或 super(参数列表) ;super ()

11、方法始终指向调用类的父类多态性 2-2父类子类 - 绘制和移动三角形子类 - 绘制和移动矩形 子类 - 绘制和移动五边形ShapeShapeDraw ()Move ()TriangleDraw () DrawTraingleMove () MoveTriangleVerticesRectangleDraw () DrawRectangleMove () MoveRectangleCornerPentagonDraw () DrawPentagonMove () MovePentagonVertices方法重载 方法重载方法重载类中有多个具有相同名称的方法方法重载方法重载方法重载方法重载类中有多

12、个具有相同名称的方法方法具有不同的参数列表方法覆盖方法覆盖方法覆盖方法覆盖方法覆盖子类和父类的方法具有相同的名称和类型用子类对象调用子类中的重写方法super.methodname() 用于调用父类中的方法编写程序完成计算器的界面设计。本节目标:掌握包的定义与包的导入;掌握修饰符的作用范围;掌握AWT图形界面组件类的使用;掌握布局管理器的使用; 任务四:任务四:包包允许将类组合成较小的单元(类似文件夹),使其易于找到和使用相应的类文件有助于避免命名冲突。在使用许多类时,类和方法的名称很难决定。有时需要使用与其他类相同的名称。包基本上隐藏了类并避免了名称上的冲突包允许在更广的范围内保护类、数据和

13、方法,可以在包内定义类,而在包外的代码不能访问该类 “包将类名空间划分为更加容易管理的块, 包既是命名机制也是可见度控制机制 ”创建包package mypackage;public class Calculate public double volume(double height, double width, double depth) 声明包导入包import mypackage.Calculate;public class PackageDemo public static void main(String args) Calculate calc=new Calculate( );

14、导入包访问修饰符 3-1信息隐藏是 OOP 最重要的功能之一,也是使用访问修饰符的原因信息隐藏的原因包括:对任何实现细节所作的更改不会影响使用该类的代码防止用户意外删除数据此类易于使用 访问修饰符访问修饰符访问修饰符访问修饰符访问修饰符访问修饰符privateprotectedpublic默认访问修饰符 3-2该类或非该类均该类或非该类均可访问可访问public只有该类可以访只有该类可以访问问private相同数据包中的相同数据包中的类可以访问类可以访问默认默认该类及其子类的该类及其子类的成员可以访问,成员可以访问,同一个包中的类同一个包中的类也可访问也可访问protected访问修饰符 3-

15、3访问修饰符可访问性位置private默认protectedpublic同一个类是是是是同一个包内的类否是是是不同包内的子类否否是是不同包并且不是子类否否否是方法修饰符方法修饰符方法修饰符方法修饰符方法修饰符staticfinalabstractstatic 修饰符 3-1static修饰符修饰的方法叫静态方法目的使该方法独立于类的实例,使用类去访问,而不是类实例,所以也叫类方法static 修饰符 3-2调用静态方法的语法为: classname.methodname( ); 规规规规 则则则则可以调用其他静态方法必须访问静态数据不能使用 super 或 this 关键字final 修饰符

16、finalfinal不能修改变量不能修改变量子类不能重写方法子类不能重写方法abstract 修饰符 3-1由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类抽象方法必须声明在抽象类中抽象方法语法:abstract type method_name(parameter_list);声明抽象类语法: abstract class 使用:父类中的某些抽象不包含任何逻辑,并需要在子类中重写,子类提供这种抽象方法的实现细节abstract 修饰符 3-2抽象类可以具有指向子类对象的对象引用 abstractabstract抽象类不能被实例化构造方法 和 static 方法不能是

17、抽象的父类的抽象方法往往在子类中实现 java.awt 包中的类体系结构ComponentButtonCheckboxContainerChoiceCanvasTextComponentLabelPanelWindowAppletFrameDialogTextAreaTextField容器可以存放组件的区域,可以存放组件的区域,可在容器上进行可在容器上进行绘制和着色绘制和着色 java.awt包中的包中的Container类可直接或间类可直接或间接派生出两个常用容器:接派生出两个常用容器:框架(框架(Frame类)和面板(类)和面板(Panel类)。类)。框架是一个带有边框的独立的窗口。框架是

18、一个带有边框的独立的窗口。面板是包含在窗口中的一个不带边框的面板是包含在窗口中的一个不带边框的区域。区域。 容器 框架框架是独立于框架是独立于Applet和浏览器的一个窗口。和浏览器的一个窗口。可以通过以下任一构造函数来创建:可以通过以下任一构造函数来创建:容器 - 面板面板不是一个单独的窗口,它只是包含在窗口面板不是一个单独的窗口,它只是包含在窗口中的一个区域。中的一个区域。面板是可以将许多组件组合起来的一种容器。面板是可以将许多组件组合起来的一种容器。必须将面板添加到窗体中。必须将面板添加到窗体中。标签通常用来指明项目的用途通常用来指明项目的用途标签不可以被用户编辑标签不可以被用户编辑文本

19、域一种用来输入文本的一种用来输入文本的GUI组件组件只能接受一行输入只能接受一行输入按钮按钮是任何按钮是任何GUI都不可或缺的组件都不可或缺的组件用来捕捉用户操作的最为简便的方式用来捕捉用户操作的最为简便的方式布局管理器用户界面上的屏幕组件可以按照一定的格式布局 例如水平排列,或按网格方式排列布局管理器类是一组类,它实现 java.AWT.LayoutManager 接口帮助在容器中放置组件Java 中可用的各种布局如下:BorderLayoutFlowLayoutGridLayoutBorderLayout 1上边的组件 左边的组件右边的组件下边的组件容器容器容器容器NorthSouthEa

20、stWestCENTERWestEastBorderLayout 2上边的组件 右边的组件 左边的组件下边的组件容器容器容器容器NorthSouthCenter方法方法说明明BorderLayout( ) 创建新的BorderLayout,组件之间没有间距 setHgap(int hgap)将组件间的水平间距设置为指定的值setVgap(int vgap)将组件间的垂直间距设置为指定的值FlowLayout 1容器容器容器容器流布局是面板的默认布局管理器左上角右下角依次排序的组件垂直或水平间距FlowLayout 2容器容器容器容器流布局是面板的默认布局管理器左上角右下角顺序排列的组件垂直或水

21、平间距方法方法说明明FlowLayout( ) 构造新的中间对齐的FlowLayout,将垂直和水平间距保留为 5 个像素setAlignment( int align)设置指定布局的对齐方式setHgap(int hgap)设置指定布局的水平间距setVgap(int vgap)设置指定布局的垂直间距GridLayout 1行行列列组件大小相同重新调整组件大小以适合各自的单元指定网格中的行数和列数,创建网格布局GridLayout 2行行列列组件大小相同重新调整组件大小以适合各自的单元指定网格中的行数和列数,创建网格布局方法方法描述描述GridLayout( ) 创建网格布局,默认为每个组件

22、占用一整列和一单行GridLayout(int rows, int cols) 用指定的行数和列数创建网格布局。 GridLayout(int rows, int cols, int hgap, int vgap) 用指定的行数和列数、指定的水平和垂直间距创建网格布局setColumns(int cols)将相应布局中的列数设置为指定值setHgap(int hgap)将相应布局中的水平间距设置为指定值setVgap(int vgap)将相应布局中的垂直间距设置为指定值setRows(int rows )将相应布局中的行数设置为指定值生成并运行该应用程序。使用布局管理器选择内容面板在属性窗口中

23、将内容面板的 Layout 属性选择为 BorderLayout从组件面板的 Swing 类别中选择 JButton将 JButton 添加至 North使用属性窗口更改属性将 JButton 添加至内容面板的左边、下边和右边从 Swing 容器类别中选择一个 JPanel,并将其添加至内容面板的中央将 JLabel 添加至 JPanel,并更改属性将 JTextField 添加至 JPanel,并更改属性public void btnNorth_actionPerformed(ActionEvent e) public void btnNorth_actionPerformed(Action

24、Event e) txtMessage.setText(“按下了按钮“北”); public void btnWest_actionPerformed(ActionEvent e) txtMessage.setText(“按下了按钮“西”); public void btnSouth_actionPerformed(ActionEvent e) txtMessage.setText(“按下了按钮“南”); public void btnEast_actionPerformed(ActionEvent e) txtMessage.setText(“按下了按钮“东”); 演示:使用布局管理器创建

25、JBuilder 应用程序在设计视图上选择按钮“北” ,在检查器窗口中单击“Events”选项卡双击检查器窗口中的 actionPerformed 事件添加如下代码以便在 txtMessage 字段中显示消息为 btnWest 的 actionPerformed 事件添加代码为 btnSouth 的 actionPerformed 事件添加代码为 btnEast 的 actionPerformed 事件添加代码 Code generated for the actionPerformed method 为 actionPerformed 方法生成的代码编写程序完成计算器的加、减、乘、除的功能实

26、现。本节目标:掌握接口的使用;掌握事件处理。 任务五:任务五:接口接口就是某个事物对外提供的一些功能的申明 可以利用接口实现多态,同时接口也弥补了Java单一继承的弱点使用interface关键字定义接口一般使用接口声明方法或常量,接口中的方法只能是声明,不能是具体的实现创建接口的步骤 2-1/ 定义方法的接口public interface myinterface public void add(int x, int y);public void volume(int x,int y, int z);/ 定义程序使用的常量的接口public interface myconstants pub

27、lic static final double price = 1450.00; public static final int counter = 5;定义一个接口:创建接口的步骤 2-2编译如下:javac myinterface.java用关键字 implements 实现接口,例如:class demo implements myinterface如果有一个以上接口被实现,则用逗号隔开接口名称,如下所示:class demo implements Mycalc, Mycount接口使用示例public interface GForce double g=9.8; void show(

28、);public class InterfaceTest public static void main(String args) GForce gForce=new Earth ( ); gForce.show( ); public class Earth implements GForce public void show( ) System.out.println(“g=“+g); 事件控制的要点Java 最新的事件处理方法是基于授权事件模型事件源生成事件并将其发送至一个或多个监听器监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事件,然后返回。事件在在授权事件模型

29、授权事件模型中,事件是一个描述事件中,事件是一个描述事件源状态改变的对象源状态改变的对象 。 通过鼠标、键盘与通过鼠标、键盘与 GUI 界面直接或间接界面直接或间接交互都会生成事件。交互都会生成事件。 如:按下一个按钮、如:按下一个按钮、通过键盘输入一个字符、选择列表框中的通过键盘输入一个字符、选择列表框中的一项、点击一下鼠标等。一项、点击一下鼠标等。事件源事件源事件源是一个生成事件的对象事件源是一个生成事件的对象一个事件源可能会生成不同类型的事件一个事件源可能会生成不同类型的事件事件源提供了一组方法,用于为事件注册事件源提供了一组方法,用于为事件注册一个或多个监听器。一个或多个监听器。每种事

30、件的类型都有其自己的注册方法。每种事件的类型都有其自己的注册方法。一般形式为:一般形式为: public void addListener (TypeListener e)AWT采取的事件控制过程采取的事件控制过程 监听器对象属于一个类的实例,这个类实监听器对象属于一个类的实例,这个类实现了一个特殊的接口,名为现了一个特殊的接口,名为“监听者接口监听者接口”事件源是一个对象,它可以注册一个或多事件源是一个对象,它可以注册一个或多个监听器对象,并向其发送事件对象。个监听器对象,并向其发送事件对象。 事件源将在发生事件时向所有注册的监听事件源将在发生事件时向所有注册的监听器发送事件对象。器发送事件

31、对象。 监听器对象使用事件对象中的信息来确定监听器对象使用事件对象中的信息来确定它们对事件的响应。它们对事件的响应。事件体系结构FocusEventAWTEventActionEventAdjustmentEventComponentEventTextEventItemEventContainerEventInputEventWindowEventPaintEventKeyEventMouseEventEventObjectAWT 事件类型 2-1事件类说明事件源ActionEvent 通常按下按钮,双击列表项或选中一个菜单项时,就会生成此事件。 Button、List、MenuItem、Te

32、xtField AdjustmentEvent 操纵滚动条时会生成此事件。 Scrollbar ComponentEvent 当一个组件移动、隐藏、调整大小或成为可见时会生成此事件。Component ItemEvent 单击复选框或列表项时,或者当一个选择框或一个可选菜单的项被选择或取消时生成此事件。 Checkbox、CheckboxMenuItem、Choice、List FocusEvent 组件获得或失去键盘焦点时会生成此事件。 ComponentAWT 事件类型 2-2事件类说明事件源KeyEvent 接收到键盘输入时会生成此事件。 Component MouseEvent 拖动、

33、移动、单击、按下或释放鼠标或在鼠标进入或退出一个组件时,会生成此事件。 Component ContainerEvent 将组件添加至容器或从中删除时会生成此事件。Container TextEvent 在文本区或文本域的文本改变时会生成此事件 。TextField、TextArea WindowEvent 当一个窗口激活、关闭、失效、恢复、最小化、打开或退出时会生成此事件。 Window 监听器接口监听器通过实现监听器通过实现 java.awt.event 包中定义包中定义的一个或多个接口来创建。的一个或多个接口来创建。在发生事件时,事件源将调用监听器定义在发生事件时,事件源将调用监听器定义

34、的相应方法。的相应方法。 有兴趣接收事件的任何监听器类都必须实有兴趣接收事件的任何监听器类都必须实现监听器接口。现监听器接口。 监听器接口列表 2-1事件监听器 方法 ActionListener actionPerformed AdjustmentListener adjustmentValueChanged ComponentListener componentResizedcomponentMovedcomponentShowncomponentHidden ContainerListener componentAddedcomponentRemoved FocusListener fo

35、cusLost、focusGained ItemListener itemStateChanged 监听器接口列表 2-2事件监听器 方法 KeyListener keyPressed、keyReleasedkeyTyped MouseListener mouseClicked、mouseEnteredmouseExited、mousePressedmouseReleased MouseMotionListener mouseDragged、mouseMoved TextListener textChanged WindowListener windowActivated、windowDeac

36、tivated windowClosed、windowClosingwindowIconified、windowDeiconifiedwindowOpened 适配器类适配器类 事件监听器接口 ComponentAdapter ComponentListener ContainerAdapter ContainerListener FocusAdapter FocusListener KeyAdapter KeyListener MouseAdapter MouseListener MouseMotionAdapter MouseMotionListener WindowAdapter Win

37、dowListener 为了使事件处理变得简单,为了使事件处理变得简单,Java Java 为为具有多个方法的监听器接口提供适具有多个方法的监听器接口提供适配器类。适配器类实现并提供了一配器类。适配器类实现并提供了一个事件监听器接口中的所有的方法,个事件监听器接口中的所有的方法,但这些方法都是空方法。但这些方法都是空方法。 privateclassMyMouseAdapterextendsMouseAdapterprivateColorbgColor; publicMyMouseAdapter(Colorc)bgColor=c;publicvoidmouseClicked(MouseEvent

38、mevent)setBackground(bgColor);repaint(); 事件源、监听器和监听器接口事件源描述事件对象中事件的性质。每个事件源都被映射至一个或多个事件监听器,发生事件时需要调用这些事件监听器。 事件源随后通过将事件对象传递至监听器接口类的方法,将事件信息发送到监听器接口。监听器分析事件对象找出事件信息,以便给出响应 。任何任何 GUI 对象的获得或失去焦点都被视为对象的获得或失去焦点都被视为焦点事件,并且事件源必须向事件监听器焦点事件,并且事件源必须向事件监听器通知事件对象已失去或已获得焦点。通知事件对象已失去或已获得焦点。焦点监听器需要实现两个方法:焦点监听器需要实现

39、两个方法:focusGained 和和 focusLost。要进行错误检查或数据校验时,对焦点的要进行错误检查或数据校验时,对焦点的捕捉就显得尤其重要。捕捉就显得尤其重要。 焦点事件焦点事件示例publicvoidfocusLost(FocusEventevent)if(event.getComponent()=ccField&!event.isTemporary()if(!checkFormat(ccField.getText()ccField.requestFocus();实现了当捕捉到失去实现了当捕捉到失去焦点事件时如何响应焦点事件时如何响应 检验失去焦点的组件中检验失去焦点的组件中的文

40、本格式是否正确的文本格式是否正确 如果格式不正确,将焦如果格式不正确,将焦点移回到该组件点移回到该组件 任务六:若除数为0,计算器程序将如何处理?本节目标:掌握异常的捕获与处理。 异常处理的基本概念异常处理机制的作用在编程中,错误总是难免会发生的关键在于发生错误之后,能否捕获错误,如何捕获错误,程序能否从错误中恢复异常处理的目的,不是要避免异常,而是在异常发生时,设法使损失降低到最小异常处理的基本概念错误与异常错误:编译程序时发现的问题,编译时会出现错误或警告。当运行程序时,错误已经不存在异常:编译时没有发现,只有在运行程序的时候,在某种特定的情况下,程序执行出现错误,这时会发生异常什么是异常

41、?public class ExceptionRaised public ExceptionRaised() public int calculate( int operand1, int operand2) int result = operand1 / operand2; return result; public static void main(String args) ExceptionRaised obj = new ExceptionRaised(); int result = obj.calculate(9, 0); System.out.println(result); 异常

42、情况异异 常常程序突然终止并将控制交给操作系统在运行时发生的错误在运行时发生的错误 IF B IS ZERO GO TO ERRORC = A / BPRINT CGO TO EXITERROR: 处理异常的块 “以零作除数,代码导致错误” DISPLAY EXIT:END处理异常 2-1处理运行时错误的伪代码手动引发异常指定由方法引发的异常 tryfinallycatchthrowsthrow处理异常 2-2要监控的程序语句包含在此块中要监控的程序语句包含在此块中要监控的程序语句包含在此块中要监控的程序语句包含在此块中以合理的方式以合理的方式以合理的方式以合理的方式捕获和处理异常捕获和处理异

43、常捕获和处理异常捕获和处理异常释放资源等释放资源等释放资源等释放资源等Java异常类 文件结束文件结束EOFException找不到文件找不到文件I/O 异常的根类异常的根类IOException数字转化格式异常,比如字符串到数字转化格式异常,比如字符串到 float 型数字型数字的转换无效的转换无效NumberFormatException不能加载所需的类不能加载所需的类ClassNotFoundException方法接收到非法参数方法接收到非法参数IllegalArgumentException数组大小小于或大于实际的数组大小数组大小小于或大于实际的数组大小ArrayIndexOutOfB

44、oundException尝试访问尝试访问 null 对象成员对象成员NullPointerException许多许多 java.lang 异常的基类异常的基类RuntimeException异常层次结构的根类异常层次结构的根类Exception算术错误情形,如以零作除数算术错误情形,如以零作除数ArithmeticException线程中断线程中断InterruptedException说说 明明异异 常常try 和 catch 块 2-1trycatch异常异常执行 catch 后程序继续正常运行程序控制 引发代码块单单 元元try 和 catch 块 2-2演示:示例 1try 和 ca

45、tch 块的用法class ExceptionRaised /* 构造方法. */ public ExceptionRaised() /* * 这个方法运行时将会产生一个异常. * param operand1 除法中的分子 * param operand2 除法中的分母 * return int 返回除法的结果 */ public int calculate(int operand1, int operand2) int result = operand1 / operand2; return result; public class ArithmeticException /* 构造方法.

46、 */ public ArithmeticException() public static void main(String args) ExceptionRaised obj = new ExceptionRaised(); try /* 定义变量 result 以存储结果. */ int result = obj.calculate(9, 0); System.out.println(result); catch (Exception e) System.err.println(“发生异常: + e.toString(); e.printStackTrace(); finally 块tr

47、y try 块块块块finally finally 块块块块catch catch 块块块块 无异常异常try、catch 和 finally 块的执行流程异常处理块的一般形式try / 要监控错误的代码块 methodGeneratingException(); catch (Exception e) / Exception e 的异常处理程序 finally / 在 try 结束前要执行的代码块 cleanup();多重 catch 块3-1一段代码可能会生成多个异常当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个类型与异常类型匹配的语句执行其中的一条 catch 语句之后

48、,其他的 catch 语句将被忽略 try . catch(ArrayIndexOutOfBoundsException e) catch(Exception e) ExceptionArithmeticExceptionNullPointerExceptionObjectThrowableErrorThreadDeathSQLExceptionRuntimeExceptionNumberFormatException异常类的层次结构Throwable 具有两个子类,它们是Exception:处理用户程序应当捕获的异常情况Error:Error 类的异常为内部错误,因此在正常情况下不期望用户的

49、程序捕获它们 AWTError多重 catch 块3-2使用多重 catch 语句时,异常子类一定要位于异常父类之前 try. catch(Exception e) catch(ArrayIndexOutOfBoundsException e) 多重 catch 块3-3演示:示例 2多重catch的使用class ExceptionCode /*构造方法.*/ protected ExceptionCode() /*这个方法将将零作除数.*/ public void calculate() try int num = 0; int num1 = 42 / num; catch (Except

50、ion e) System.out.println(父类异常 catch 子句); catch (ArithmeticException ae) / 错误 不能到达的代码 System.out.println(这个子类的父类是 + exception 类,且不能到达); class UnreachableCode /*构造方法.*/ protected UnreachableCode() /* * 类和应用程序的唯一进入点. * param args 字符串参数的数组 */ public static void main(String args) ExceptionCode obj = new

51、 ExceptionCode(); obj.calculate(); 嵌套 try catch 块 如果内层 try 没有相应的 catch,则检查外层 catch class NestedException /* 构造方法。 */ protected NestedException() /* 这个方法检测数字的格式。 * param argument 用于存储 args 的值。 */ public test(String argumnet) try int num = Integer.parseInt(args1); /* 嵌套 try 块。 */ try int numValue = In

52、teger.parseInt(args0); System.out.println(“args0 + “的平方是 + numValue * numValue); catch (NumberFormatException nb) System.out.println(“不是一个数字! ); catch (ArrayIndexOutOfBoundsException ne) System.out.println(“请输入数字!); /*main方法*/ public static void main(String args) NestedException obj = new NestedExce

53、ption(); obj.test(args0); 因此需要嵌套异常处理程序使用 throw 和 throws 2-1 语句语句 3throw throw 异常异常异常异常引发的异常引发的异常停止停止异常处理程序可执行程序语句可执行程序语句语句语句 1语句语句 2使用 throw异常是通过关键字异常是通过关键字 throw 抛出,抛出,程序可程序可以用以用throw语句引发明确的异常。如:语句引发明确的异常。如: tryif(flag0)thrownewNullPointerException();throw语句的操作数一定是语句的操作数一定是Throwable类类类型或类型或Throwabl

54、e子类类型的一个对象。子类类型的一个对象。使用 throws如果一个方法可能导致一个异常但不处理它,此时要求在方法声明中包含 throws 子句,通知潜在调用者,如果发生了异常,由调用者处理。一个throws子句列举了一个方法可能引发的所有异常类型。这对于除Error或RuntimeException及它们子类以外类型的所有异常是必要的。Throw示例public class ThrowDemopublic static void main (String args)tryint arrSize=args.length;ThrowDemo td=new ThrowDemo();td.check

55、(arrSize1);catch(ArrayIndexOutOfBoundsException e)System.out.println(“数组下标越界”);void check (int arrSize)if (arrSize=0)throw new NegativeArraySizeException(“数组大小为负”);使用 throw 和 throws 2-2处理异常被调用的方法被调用的方法调用方法调用方法处理异常可能会导致异常防止被调用的方法出现异常并处理异常type calledmethod-name(parameter-list) throws exception-list /

56、body of methodtype callingmethod-name try / statements calledmethod-name();catch(Exception e) /statements使用 throws示例classThrowsDemostaticvoidthrowOne()throwsIllegalAccessExceptionSystem.out.println(在throwOne中.);thrownewIllegalAccessException(非法访问异常);publicstaticvoidmain(Stringargs)trythrowOne();catc

57、h(IllegalAccessExceptione)System.out.println(捕获+e); 在该方法中没有处在该方法中没有处理异常,只是声明理异常,只是声明可能引发的异常可能引发的异常在在throwOne方方法法的调用函数中捕的调用函数中捕获并处理异常获并处理异常用户自定义异常 2-1自定义异常概念使用自定义异常的时候JavaAPI提供的内置异常不一定总能捕获程序中发生的所有错误。有时会需要创建用户自定义异常 自定义异常需要继承Exception 及其子类class ArraySizeException extends NegativeArraySizeException /* 构

58、造方法。 */ ArraySizeException() super(“您传递的数组大小非法); 用户自定义异常 2-2示例: 示例 6创建用户自定义异常继承 Exception 或其子类 class ExceptionClass ExceptionClass(int val) size = val; try checkSize(); catch (ArraySizeException e) System.out.println(e); /* 声明变量以存储数组的大小和元素. */ private int size; private int array; /* 检查数组长度的方法. * thr

59、ows 一个 ArraySizeException */ public void checkSize() throws ArraySizeException if (size 0) throw new ArraySizeException(); array = new int3; for (int count = 0; count 3; count+) arraycount = count + 1; class UserDefinedExceptions /* 构造方法. */ protected UserDefinedExceptions() /* * 类和应用程序的唯一入口点. * param arg 字符串参数的数组 */ public static void main(String arg) ExceptionClass obj = new ExceptionClass(Integer.parseInt(arg0);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号