Java项目化教程ppt课件(完整版)_第1页
Java项目化教程ppt课件(完整版)_第2页
Java项目化教程ppt课件(完整版)_第3页
Java项目化教程ppt课件(完整版)_第4页
Java项目化教程ppt课件(完整版)_第5页
已阅读5页,还剩316页未读 继续免费阅读

下载本文档

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

文档简介

1、Java面向对象程序设计什么是Java?什么是面向对象?WHAT?WHY?为什么要学习Java语言?HOW?1、上课专心,做好笔记2、上机作业认真完成,实验上课例题3、消化每次课的内容4、不懂就问5、树立信心课程目标1、建立面向对象程序设计的思想2、掌握JAVA语言的基本语法3、掌握图形界面的设计4、掌握使用Java语言实现多线程,异常处理,输入输出,网络通信等程序的编写5、掌握数据库的连接和访问任务一 开发平台搭建本节目标:掌握Java 程序运行环境的配置 理解Java 虚拟机 (JVM)能够使用Eclipse开发Java程序。 1.1Java的起源Sun Microsystems 于199

2、5年推出1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言。希望用于控制嵌入在有线电视交换盒、PDA等的微处理器1994年将Oak语言更名为JavaJava 既安全、可移植,又可跨平台,而且人们发现它能够解决Internet 上的大型应用问题1.2.1Java对Internet影响Internet使Java成为网上最流行的编程语言 Java对Internet的影响也意义深远 在Java出现以前,几乎没有什么工具可以在 Internet上执行动态交互程序 Applet程序可以对用户的输入和操作做出响应1.2.2 Java虚拟机Java是一种既面向对象又可跨平台的

3、语言它用于创建单机应用程序、基于网络的程序和消费类设备程序。例如:移动电话和掌上导航系统Java 字节码(可跨平台)WindowsLinuxSolaris运行编译Java 源程序代码JVMJava 虚拟机1.2.2 Java虚拟机 可运行Java字节码的虚拟计算机系统 它有一个解释器组件,可以实现Java字节码和计算机操作系统之间的通信用户USER字节码程序JVM (Java 虚拟机)操作系统硬 件Java虚拟机的运行过程编译时.java(源代码).class(字节码)运行时解释器硬件网络字节码校验器类加载器JIT代码生成器1.3 Java的特点 简单 Java 设计人员删除了C+ 中许多复杂

4、的功能,如指针操纵和运算符重载等面向对象 在 Java 中任何东西都是对象。因此,重点集中在数据、应用程序中操作对象的方法以及过程上跨平台一次编译,到处运行健壮性 Java 在编译和解释时都会检查代码1.3 Java的特点 安全性 Java 提供了用于执行程序的受控环境,以及多层次的安全控制可移植性 Java 可用于开发能够在多个平台、操作系统和图形用户界面之间移植的应用程序多线程 Java 程序使用称为“多线程”的进程同时处理多项任务动态性不会因为程序的更新而重新编译程序1.4 Java程序的开发JDK是有助于程序员开发Java程序的Java开发工具包 j2sdk1.4.2_02了解安装目录

5、 :bin目录:存放可执行文件;lib目录:存放Java的类库文件;include目录:存放用于本地方法的文件; demo目录:存放演示程序;jre目录:存放Java运行环境文件 配置环境变量 演示环境变量的配置单击右键选择高级选择路径添加路径Java工具集javac:用于编译Java 源代码的编译器语法:javac 选项 源文件 源文件以扩展名.java 结尾选项可以包括:-classpath-djava:用于执行 Java 字节码的解释器java 选项 类名称 参数选项可以包括-classpath-versionJava API文档选择包选择包中的接口或类可查看相应帮助1.4.2开发Jav

6、a程序的步骤 创建Java源程序Java源程序一般用java作为扩展名,是一个文本文 件,用Java语言写成,可以用任何文本编辑器创建 与编辑;编译源程序Java编译器,“javac”,读取你的Java源程序并翻译 成Java虚拟机能够明白的指令集合,且以字节码的 形式保存在文件中。通常,字节码文件以class作为 扩展名;运行class(字节码)文件Java解释器读取字节码,取出指令并且翻译成计算 机能执行的代码,完成运行过程;第一个Java程序 /* * 此类用于在屏幕上显示消息。 */class Message /* * 这是一个 main 方法 */ public static voi

7、d main(String args) /* 输出此消息 */ System.out.println(欢迎来到 Java 世界!); 在记事本编辑Java程序public class Message /* * 这是一个 main 方法。 */ public static void main(String args) /* 输出此消息 */ System.out.println(欢迎来到 Java 世界!); 演示编辑和保存Java程序依次选择程序附件记事本单击开始编译和运行演示编译和运行Java程序单击开始进入程序所保存的目录依次选择程序-附件-命令提示符编译Javac Message.jav

8、a运行java Message输出结果 分析程序 3-1 符号 /* */ 指示中间的语句是该程序中的注释。多行注释以 /* 开始,以 */ 结束。单行注释以 / 开始,以行末结束java文档注释使用/* */关键字 class 声明类的定义,还帮助编译器理解它是一个类的声明整个类及其所有成员都是在一对大括号中(即 和 之间)定义的。它们标志着类定义块的开始和结束 分析程序 3-2 程序从 main( ) 方法开始执行关键字 public 是一个访问说明符,控制类成员的可见度和作用域关键字 static 允许调用 main( ) 方法,而无需创建类的实例关键字 void 告诉编译器 main(

9、 ) 方法在执行时不返回任何值分析程序 3-3main( )方法是所有Java 应用程序的起始点 args 是String类型的数组 println( )方法通过 System.out 显示作为参数传递给它的字符串1.2安装MyEclipse 编译调试java程序,存在很多不方便,无法直接修改,无法跟踪调试,不能完成更多复杂的程序的开发。MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是一个十分优秀的用于Java,J2EE的Eclipse插件集合,MyEclipse功能非常强大,多各种开源产品支持非常不错。它是功能丰富的

10、JavaSE,JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSP,CSS,JavaScript,SQL,Hibernate。使用MyEclipse开发程序 使用MyEclipse开发程序使用MyEclipse开发Java程序的第一步是建立一个项目,一个独立的程序就需要一个项目。单击“File”菜单-“New”-“Java Project” .使用MyEclipse开发程序第二步,在src文件夹下,创建Java class。右键单击src文件夹,在弹出菜单中,选择“New”-“class”。 在MyEclipse中运行程序总结Java 是面向

11、对象的跨平台语言Java 可用来生成两类程序:应用程序、 小应用程序JDK 提供多种工具,这些工具位于 JDK 的 bin 目录下,具体如下:javac java javadocJava 字节码是 Java 虚拟机 (JVM) 可理解的机器语言指令,通常作为 Java 语言源代码的编译结果而生成项目一 计算器任务一:完成简单计算器的程序设计,能够通过控制台实现两个数的加、减、乘、除。本节目标:掌握变量、标识符的定义;掌握简单数据类型的使用;掌握各种运算符的使用; 变量的定义 变量是Java程序中存储数据的基本单元。声明变量的语法为:数据类型 变量名=值,标识符=值;Java中的所有变量都必须声

12、明后才能使用。通过将标识符用逗号隔开可以声明多个变量,变量区分大小写。标识符 用来标识类名、变量名、方法名、类型名、数组名、文件名的有效字符序列称为标识符。Java语言规定标识符由字母、数字、下划线“_”和美元符号“$”组成,并且第一个字符不能是数字符号。Java语言中的标识符是严格区分大小写的。关于标识符的另一个重要限制是,不能使用Java语言的关键字。Java标识符的长度没有任何限制。基本数据类型 变量变量声明由以下三个部分组成:数据类型名称要赋给的初始值(可选) 语法:数据类型 标识符 =值, 标识符=值;标识符标识符必须以字母,下划线“_”或“$”符号开头。首字母后面可以跟任意数量的字

13、母,数字,下划线“_”或“$”符号。可以包含数字,但不能以数字开头。不能使用Java关键字。判断下列变量名是否合法:Myvariable9pinsa+c_9pins -9pins数据转换类型自动类型转换强制类型转换将一种类型的变量赋给另 一种类型的变量时,只要 满足以下条件,就会发生 自动类型转换:两种类型兼容;目标类型大于源类型;强制转换用于显式类型 转换。如果被转换的值 的数据类型大于其目标 类型,就会丢失部分信 息类型强制转换类型强制转换使程序将变量视为某种类型,尽管此变量中包含的是另一类型的数据 示例:float c = 34.89675f;int b = (int) c + 10;

14、/ 将 c 转换为整型算术运算符 赋值运算符 关系运算符 逻辑运算符 编写程序实现Xn,n!。本节目标:掌握Java语言中的各种流程控制语句的使用。 任务二:控制流语句的类型判断语句if-else 语句switch-case 语句循环语句while 循环do-while 循环for 循环if-else 语句If-else 语句测试条件的结果,然后根据此结果来执行相应的操作它可用于以两个不同的路径来执行程序if-else 语句的语法为:if (condition)action1;elseaction2;switch-case 语句switch-case 语句可用于替换 if-else-if 语句

15、在表达式可以得出多个值的情况下,使用此语句使用 switch-case 语句会带来更好的效果switch-case 语句的语法为: switch (表达式) case 1: 操作 1 的语句; 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 (测试

16、) / 语句 被执行条件 = true循环 3-2do-whiledo-while 循环执行某些语句,直到指定的条件为真。此循环确保循环体至少执行一次语法do System.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

17、-1两种跳转语句为:breakcontinuebreak 语句:用于终止块。continue 语句:有时程序员可能希望继续循环,而停止处理其主体内的其余代码,以进行特定的迭代。continue 语句可用于这种操作。运用面向对象的思想,编写计算器类,并定义加、减、乘、除四个方法。本节目标:掌握类和对象的声明;掌握类的继承实现;掌握类的覆盖和重载的区别和使用。 任务三:面向对象编程OOP旨在在计算机程序中模拟现实世界中的概念在 OOP 中,现实世界的所有事物全都被视为对象能够在计算机程序中用类似的实体模拟现实世界中的实体设计和实现软件系统的方法对象对 象面向对象编程的核心为计算机应用程序提供实用基

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

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

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

21、子类 - 绘制和移动五边形ShapeDraw ()Move ()TriangleDraw () DrawTraingleMove () MoveTriangleVerticesRectangleDraw () DrawRectangleMove () MoveRectangleCornerPentagonDraw () DrawPentagonMove () MovePentagonVertices方法重载 方法重载类中有多个具有相同名称的方法方法重载类中有多个具有相同名称的方法方法具有不同的参数列表方法覆盖方法覆盖子类和父类的方法具有相同的名称和类型用子类对象调用子类中的重写方法super.

22、methodname() 用于调用父类中的方法编写程序完成计算器的界面设计。本节目标:掌握包的定义与包的导入;掌握修饰符的作用范围;掌握AWT图形界面组件类的使用;掌握布局管理器的使用; 任务四:包包允许将类组合成较小的单元(类似文件夹),使其易于找到和使用相应的类文件有助于避免命名冲突。在使用许多类时,类和方法的名称很难决定。有时需要使用与其他类相同的名称。包基本上隐藏了类并避免了名称上的冲突包允许在更广的范围内保护类、数据和方法,可以在包内定义类,而在包外的代码不能访问该类 “包将类名空间划分为更加容易管理的块, 包既是命名机制也是可见度控制机制 ”创建包package mypackage

23、;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( ); 导入包访问修饰符 3-1信息隐藏是 OOP 最重要的功能之一,也是使用访问修饰符的原因信息隐藏的原因包括:对任何实现细节所作的更改不会影响使用该类的代码防止用户意外删除

24、数据此类易于使用 访问修饰符访问修饰符privateprotectedpublic默认访问修饰符 3-2该类或非该类均可访问public只有该类可以访问private相同数据包中的类可以访问默认该类及其子类的成员可以访问,同一个包中的类也可访问protected访问修饰符 3-3访问修饰符可访问性位置private默认protectedpublic同一个类是是是是同一个包内的类否是是是不同包内的子类否否是是不同包并且不是子类否否否是方法修饰符方法修饰符staticfinalabstractstatic 修饰符 3-1static修饰符修饰的方法叫静态方法目的使该方法独立于类的实例,使用类去访问

25、,而不是类实例,所以也叫类方法static 修饰符 3-2调用静态方法的语法为: classname.methodname( ); 规 则可以调用其他静态方法必须访问静态数据不能使用 super 或 this 关键字final 修饰符 final不能修改变量子类不能重写方法abstract 修饰符 3-1由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类抽象方法必须声明在抽象类中抽象方法语法:abstract type method_name(parameter_list);声明抽象类语法: abstract class 使用:父类中的某些抽象不包含任何逻辑,并需要在子

26、类中重写,子类提供这种抽象方法的实现细节abstract 修饰符 3-2抽象类可以具有指向子类对象的对象引用 abstract抽象类不能被实例化构造方法 和 static 方法不能是抽象的父类的抽象方法往往在子类中实现 java.awt 包中的类体系结构ComponentButtonCheckboxContainerChoiceCanvasTextComponentLabelPanelWindowAppletFrameDialogTextAreaTextField容器可以存放组件的区域,可在容器上进行绘制和着色 java.awt包中的Container类可直接或间接派生出两个常用容器:框架(F

27、rame类)和面板(Panel类)。框架是一个带有边框的独立的窗口。面板是包含在窗口中的一个不带边框的区域。 容器 框架框架是独立于Applet和浏览器的一个窗口。可以通过以下任一构造函数来创建:容器 - 面板面板不是一个单独的窗口,它只是包含在窗口中的一个区域。面板是可以将许多组件组合起来的一种容器。必须将面板添加到窗体中。标签通常用来指明项目的用途标签不可以被用户编辑文本域一种用来输入文本的GUI组件只能接受一行输入按钮按钮是任何GUI都不可或缺的组件用来捕捉用户操作的最为简便的方式布局管理器用户界面上的屏幕组件可以按照一定的格式布局 例如水平排列,或按网格方式排列布局管理器类是一组类,它

28、实现 java.AWT.LayoutManager 接口帮助在容器中放置组件Java 中可用的各种布局如下:BorderLayoutFlowLayoutGridLayoutBorderLayout 1上边的组件 左边的组件右边的组件下边的组件容器NorthSouthEastWestCENTERWestEastBorderLayout 2上边的组件 右边的组件 左边的组件下边的组件容器NorthSouthCenter方法说明BorderLayout( ) 创建新的BorderLayout,组件之间没有间距 setHgap(int hgap)将组件间的水平间距设置为指定的值setVgap(int

29、vgap)将组件间的垂直间距设置为指定的值FlowLayout 1容器流布局是面板的默认布局管理器左上角右下角依次排序的组件垂直或水平间距FlowLayout 2容器流布局是面板的默认布局管理器左上角右下角顺序排列的组件垂直或水平间距方法说明FlowLayout( ) 构造新的中间对齐的FlowLayout,将垂直和水平间距保留为 5 个像素setAlignment( int align)设置指定布局的对齐方式setHgap(int hgap)设置指定布局的水平间距setVgap(int vgap)设置指定布局的垂直间距GridLayout 1行列组件大小相同重新调整组件大小以适合各自的单元指

30、定网格中的行数和列数,创建网格布局GridLayout 2行列组件大小相同重新调整组件大小以适合各自的单元指定网格中的行数和列数,创建网格布局方法描述GridLayout( ) 创建网格布局,默认为每个组件占用一整列和一单行GridLayout(int rows, int cols) 用指定的行数和列数创建网格布局。 GridLayout(int rows, int cols, int hgap, int vgap) 用指定的行数和列数、指定的水平和垂直间距创建网格布局setColumns(int cols)将相应布局中的列数设置为指定值setHgap(int hgap)将相应布局中的水平间距

31、设置为指定值setVgap(int vgap)将相应布局中的垂直间距设置为指定值setRows(int rows )将相应布局中的行数设置为指定值生成并运行该应用程序。使用布局管理器选择内容面板在属性窗口中将内容面板的 Layout 属性选择为 BorderLayout从组件面板的 Swing 类别中选择 JButton将 JButton 添加至 North使用属性窗口更改属性将 JButton 添加至内容面板的左边、下边和右边从 Swing 容器类别中选择一个 JPanel,并将其添加至内容面板的中央将 JLabel 添加至 JPanel,并更改属性将 JTextField 添加至 JPan

32、el,并更改属性public void btnNorth_actionPerformed(ActionEvent e) public void btnNorth_actionPerformed(ActionEvent e) txtMessage.setText(“按下了按钮“北”); public void btnWest_actionPerformed(ActionEvent e) txtMessage.setText(“按下了按钮“西”); public void btnSouth_actionPerformed(ActionEvent e) txtMessage.setText(“按下了

33、按钮“南”); public void btnEast_actionPerformed(ActionEvent e) txtMessage.setText(“按下了按钮“东”); 演示:使用布局管理器创建 JBuilder 应用程序在设计视图上选择按钮“北” ,在检查器窗口中单击“Events”选项卡双击检查器窗口中的 actionPerformed 事件添加如下代码以便在 txtMessage 字段中显示消息为 btnWest 的 actionPerformed 事件添加代码为 btnSouth 的 actionPerformed 事件添加代码为 btnEast 的 actionPerfor

34、med 事件添加代码 Code generated for the actionPerformed method 为 actionPerformed 方法生成的代码编写程序完成计算器的加、减、乘、除的功能实现。本节目标:掌握接口的使用;掌握事件处理。 任务五:接口接口就是某个事物对外提供的一些功能的申明 可以利用接口实现多态,同时接口也弥补了Java单一继承的弱点使用interface关键字定义接口一般使用接口声明方法或常量,接口中的方法只能是声明,不能是具体的实现创建接口的步骤 2-1/ 定义方法的接口public interface myinterface public void add(

35、int x, int y);public void volume(int x,int y, int z);/ 定义程序使用的常量的接口public interface myconstants public static final double price = 1450.00; public static final int counter = 5;定义一个接口:创建接口的步骤 2-2编译如下:javac myinterface.java用关键字 implements 实现接口,例如:class demo implements myinterface如果有一个以上接口被实现,则用逗号隔开接口名

36、称,如下所示: class demo implements Mycalc, Mycount接口使用示例public interface GForce double g=9.8; void show( );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); 事件控制

37、的要点Java 最新的事件处理方法是基于授权事件模型事件源生成事件并将其发送至一个或多个监听器监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事件,然后返回。事件在授权事件模型中,事件是一个描述事件源状态改变的对象 。 通过鼠标、键盘与 GUI 界面直接或间接交互都会生成事件。 如:按下一个按钮、通过键盘输入一个字符、选择列表框中的一项、点击一下鼠标等。事件源事件源是一个生成事件的对象一个事件源可能会生成不同类型的事件事件源提供了一组方法,用于为事件注册一个或多个监听器。每种事件的类型都有其自己的注册方法。一般形式为: public void addListener (T

38、ypeListener e)AWT采取的事件控制过程 监听器对象属于一个类的实例,这个类实现了一个特殊的接口,名为“监听者接口”事件源是一个对象,它可以注册一个或多个监听器对象,并向其发送事件对象。 事件源将在发生事件时向所有注册的监听器发送事件对象。 监听器对象使用事件对象中的信息来确定它们对事件的响应。事件体系结构FocusEventAWTEventActionEventAdjustmentEventComponentEventTextEventItemEventContainerEventInputEventWindowEventPaintEventKeyEventMouseEventE

39、ventObjectAWT 事件类型 2-1事件类说明事件源ActionEvent 通常按下按钮,双击列表项或选中一个菜单项时,就会生成此事件。 Button、List、MenuItem、TextField AdjustmentEvent 操纵滚动条时会生成此事件。 Scrollbar ComponentEvent 当一个组件移动、隐藏、调整大小或成为可见时会生成此事件。Component ItemEvent 单击复选框或列表项时,或者当一个选择框或一个可选菜单的项被选择或取消时生成此事件。 Checkbox、CheckboxMenuItem、Choice、List FocusEvent 组件

40、获得或失去键盘焦点时会生成此事件。 ComponentAWT 事件类型 2-2事件类说明事件源KeyEvent 接收到键盘输入时会生成此事件。 Component MouseEvent 拖动、移动、单击、按下或释放鼠标或在鼠标进入或退出一个组件时,会生成此事件。 Component ContainerEvent 将组件添加至容器或从中删除时会生成此事件。Container TextEvent 在文本区或文本域的文本改变时会生成此事件 。TextField、TextArea WindowEvent 当一个窗口激活、关闭、失效、恢复、最小化、打开或退出时会生成此事件。 Window 监听器接口监听

41、器通过实现 java.awt.event 包中定义的一个或多个接口来创建。在发生事件时,事件源将调用监听器定义的相应方法。 有兴趣接收事件的任何监听器类都必须实现监听器接口。 监听器接口列表 2-1事件监听器 方法 ActionListener actionPerformed AdjustmentListener adjustmentValueChanged ComponentListener componentResizedcomponentMovedcomponentShowncomponentHidden ContainerListener componentAddedcomponent

42、Removed FocusListener focusLost、focusGained ItemListener itemStateChanged 监听器接口列表 2-2事件监听器 方法 KeyListener keyPressed、keyReleasedkeyTyped MouseListener mouseClicked、mouseEnteredmouseExited、mousePressedmouseReleased MouseMotionListener mouseDragged、mouseMoved TextListener textChanged WindowListener wi

43、ndowActivated、windowDeactivated windowClosed、windowClosingwindowIconified、windowDeiconifiedwindowOpened 适配器类适配器类 事件监听器接口 ComponentAdapter ComponentListener ContainerAdapter ContainerListener FocusAdapter FocusListener KeyAdapter KeyListener MouseAdapter MouseListener MouseMotionAdapter MouseMotionLi

44、stener WindowAdapter WindowListener 为了使事件处理变得简单,Java 为具有多个方法的监听器接口提供适配器类。适配器类实现并提供了一个事件监听器接口中的所有的方法,但这些方法都是空方法。 private class MyMouseAdapter extends MouseAdapter private Color bgColor; public MyMouseAdapter (Color c) bgColor = c; public void mouseClicked(MouseEvent mevent) setBackground(bgColor); re

45、paint(); 事件源、监听器和监听器接口事件源描述事件对象中事件的性质。每个事件源都被映射至一个或多个事件监听器,发生事件时需要调用这些事件监听器。 事件源随后通过将事件对象传递至监听器接口类的方法,将事件信息发送到监听器接口。监听器分析事件对象找出事件信息,以便给出响应 。任何 GUI 对象的获得或失去焦点都被视为焦点事件,并且事件源必须向事件监听器通知事件对象已失去或已获得焦点。焦点监听器需要实现两个方法:focusGained 和 focusLost。要进行错误检查或数据校验时,对焦点的捕捉就显得尤其重要。 焦点事件焦点事件示例public void focusLost(FocusE

46、vent event) if(event.getComponent() = ccField & !event.isTemporary() if(!checkFormat(ccField.getText() ccField.requestFocus(); 实现了当捕捉到失去焦点事件时如何响应 检验失去焦点的组件中的文本格式是否正确 如果格式不正确,将焦点移回到该组件 任务六:若除数为0,计算器程序将如何处理?本节目标:掌握异常的捕获与处理。 异常处理的基本概念异常处理机制的作用在编程中,错误总是难免会发生的关键在于发生错误之后,能否捕获错误,如何捕获错误,程序能否从错误中恢复异常处理的目的,不是

47、要避免异常,而是在异常发生时,设法使损失降低到最小异常处理的基本概念错误与异常错误:编译程序时发现的问题,编译时会出现错误或警告。当运行程序时,错误已经不存在异常:编译时没有发现,只有在运行程序的时候,在某种特定的情况下,程序执行出现错误,这时会发生异常什么是异常?public class ExceptionRaised public ExceptionRaised() public int calculate( int operand1, int operand2) int result = operand1 / operand2; return result; public static

48、void main(String args) ExceptionRaised obj = new ExceptionRaised(); int result = obj.calculate(9, 0); System.out.println(result); OS!异常情况异 常程序突然终止并将控制交给操作系统在运行时发生的错误 IF B IS ZERO GO TO ERRORC = A / BPRINT CGO TO EXITERROR: 处理异常的块 “以零作除数,代码导致错误” DISPLAY EXIT:END处理异常 2-1处理运行时错误的伪代码手动引发异常指定由方法引发的异常 try

49、finallycatchthrowsthrow处理异常 2-2要监控的程序语句包含在此块中以合理的方式捕获和处理异常释放资源等Java异常类 文件结束EOFException找不到文件FileNotFoundExceptionI/O 异常的根类IOException数字转化格式异常,比如字符串到 float 型数字的转换无效NumberFormatException不能加载所需的类ClassNotFoundException方法接收到非法参数IllegalArgumentException数组大小小于或大于实际的数组大小ArrayIndexOutOfBoundException尝试访问 nul

50、l 对象成员NullPointerException许多 java.lang 异常的基类RuntimeException异常层次结构的根类Exception算术错误情形,如以零作除数ArithmeticException线程中断InterruptedException说 明异 常try 和 catch 块 2-1trycatch异常执行 catch 后程序继续正常运行程序控制 引发代码块单 元try 和 catch 块 2-2演示:示例 1try 和 catch 块的用法class ExceptionRaised /* 构造方法. */ public ExceptionRaised() /*

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

52、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 块try 块finally 块catch 块 无异常异常try、catch 和 finally 块的执行流程异常处理块的一般形式try / 要监控

53、错误的代码块 methodGeneratingException(); catch (Exception e) / Exception e 的异常处理程序 finally / 在 try 结束前要执行的代码块 cleanup();多重 catch 块3-1一段代码可能会生成多个异常当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个类型与异常类型匹配的语句执行其中的一条 catch 语句之后,其他的 catch 语句将被忽略 try . catch(ArrayIndexOutOfBoundsException e) catch(Exception e) ExceptionArith

54、meticExceptionNullPointerExceptionObjectThrowableErrorThreadDeathSQLExceptionRuntimeExceptionNumberFormatException异常类的层次结构Throwable 具有两个子类,它们是Exception:处理用户程序应当捕获的异常情况Error:Error 类的异常为内部错误,因此在正常情况下不期望用户的程序捕获它们 AWTError多重 catch 块3-2使用多重 catch 语句时,异常子类一定要位于异常父类之前 try . catch(Exception e) catch(ArrayIn

55、dexOutOfBoundsException e) 多重 catch 块3-3演示:示例 2多重catch的使用class ExceptionCode /*构造方法.*/ protected ExceptionCode() /*这个方法将将零作除数.*/ public void calculate() try int num = 0; int num1 = 42 / num; catch (Exception e) System.out.println(父类异常 catch 子句); catch (ArithmeticException ae) / 错误 不能到达的代码 System.out

56、.println(这个子类的父类是 + exception 类,且不能到达); class UnreachableCode /*构造方法.*/ protected UnreachableCode() /* * 类和应用程序的唯一进入点. * param args 字符串参数的数组 */ public static void main(String args) ExceptionCode obj = new ExceptionCode(); obj.calculate(); 嵌套 try catch 块 如果内层 try 没有相应的 catch,则检查外层 catch class NestedE

57、xception /* 构造方法。 */ protected NestedException() /* 这个方法检测数字的格式。 * param argument 用于存储 args 的值。 */ public test(String argumnet) try int num = Integer.parseInt(args1); /* 嵌套 try 块。 */ try int numValue = Integer.parseInt(args0); System.out.println(“args0 + “的平方是 + numValue * numValue); catch (NumberFo

58、rmatException nb) System.out.println(“不是一个数字! ); catch (ArrayIndexOutOfBoundsException ne) System.out.println(“请输入数字!); /*main方法*/ public static void main(String args) NestedException obj = new NestedException(); obj.test(args0); 因此需要嵌套异常处理程序!使用 throw 和 throws 2-1 语句 3throw 异常引发的异常!停止异常处理程序可执行程序语句语句

59、 1语句 2使用 throw异常是通过关键字 throw 抛出,程序可以用throw语句引发明确的异常。如: try if(flag0) throw new NullPointerException();throw语句的操作数一定是Throwable类类型或Throwable子类类型的一个对象。使用 throws如果一个方法可能导致一个异常但不处理它,此时要求在方法声明中包含 throws 子句,通知潜在调用者,如果发生了异常,由调用者处理。一个throws子句列举了一个方法可能引发的所有异常类型。这对于除Error或RuntimeException及它们子类以外类型的所有异常是必要的。Thr

60、ow示例public class ThrowDemopublic static void main (String args)tryint arrSize=args.length;ThrowDemo td=new ThrowDemo();td.check(arrSize1);catch(ArrayIndexOutOfBoundsException e)System.out.println(“数组下标越界”);void check (int arrSize)if (arrSize=0)throw new NegativeArraySizeException(“数组大小为负”);使用 throw

温馨提示

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

评论

0/150

提交评论