面向对象程序设计(下).ppt_第1页
面向对象程序设计(下).ppt_第2页
面向对象程序设计(下).ppt_第3页
面向对象程序设计(下).ppt_第4页
面向对象程序设计(下).ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

第4章 Java面向对象程序设计(下),本章学习目标,了解基本类型包装器 了解对象的比较 掌握抽象类、接口及内部类的定义和使用 了解垃圾回收机制 掌握创建jar包,任务1-包装类的使用,【任务内容】从命令行参数录入Person类的姓名和年龄 【能力目标】 学会包装类的应用 掌握使用包装类进行类型转换 会使用包装类解决实际问题 【任务分析】 按照之前学过的知识,应用程序运行时,命令行提供的参数都是以字符串的形式存储在main方法的args字符串数组中,而Person类中的年龄却是以int类型存储,那么如何将字符串类型的年龄转变成int类型的年龄?,4.1 包装类,范例:Str2IntExam.java Java语言是一个面向对象的语言,但是Java中的基本数据类型却不是面向对象的,这在实际使用时存在很多不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类,这八个和基本数据类型对应的类统称为包装类或数据类型类。,对于包装类来说,主要包含两种用途: 1)将字符串类型转换为基本类型,2)封装基本类型,将基本类型当做对象类型用。方法如下: 包装类型 对象 = new 包装类型(基本类型); 包装类型 对象 = 基本类型; 包装类型 对象 = new 包装类型(“基本类型”); 例如: Integer value1 = new Integer(30); Integer value2 = new Integer(“70”); Integer value3 = value1 + value2; /通过intValue()方法提取包装类的值 System.out.println(Value();,任务2-比较两个对象是否相等,【任务内容】比较公司的两个员工是否相同 【能力目标】 了解两个对象之间如何进行相等比较 掌握用equals比较两个对象 了解=运算符与equals比较对象相等的差异 学会运用对象相等比较解决实际问题 【任务分析】 公司雇员在程序中是以对象类型存储。然而对象是复合数据类型,那么如何才能比较两个对象是否相等。,4.2 比较对象,范例:Employee.java 1. “=”运算符比较对象相等 Java中,对象属于引用类型,对象实体存储在堆存储区中,对象变量位于栈存储区当中,变量中存储了对象实体在堆内存中的地址,“=”运算符只能比较对象变量中存储的地址是否相同而不能比较两个对象实体的内容是否相同。 2. equals()方法比较对象相等 equals方法是用来比较两个对象的内容是否相等,也就是判断两个对象间各个属性的值是否相同,equals方法是在Object中定义的。在Object类中,这个方法将判断两个对象是否具有相同的引用。如果两个对象具有相同的引用,它们一定是相等的。对于多数类来说,这种判断并没有什么意义。所以开发人员应当在自己的类当中重新实现该方法。,任务3-抽象类,【任务内容】 设计工人模块和学生模块,两个模块都有说话方法,说话的内容要由工人或学生决定,同时这两个模块应共属同一类型人。 【能力目标】 了解抽象类的概念 掌握抽象类的定义 学会运用抽象类解决实际问题 【任务分析】 该案例需要设计两个模块,即工人模块和学生模块,这两个模块既有相似之处,也有不同之处,为了最大限度的实现代码复用,需要设计一个公共父类,包含有两个模块的公共方法,而两个模块只需要实现各自不同的行为即可。然而两个模块均有一公共方法,即说话的方法say(),需要在父类中定义,但具体说话内容两个模块却各有不同。现在引入一个问题,如果say()方法定义于父类,父类say()方法具体实现就没有了意义。,4.3 抽象类与接口,范例:AbstractClassExam.java,抽象类:就是不能使用new关键字进行实例化的类,即没有具体实例对象的类。抽象类通常不具备实际功能,不能创建对象,只作为专门用来派生其他子类的基类。定义抽象类的目的是为子类提供公共信息与接口。 抽象方法:是一种不完整的方法,它只包含有方法声明,而无方法体的定义,因而抽象方法是只有方法原型而无功能实现的一种行为规范,用来为所在类的子类声明方法的接口标准。,当声明类为抽象类时,需要在这个类前加修饰abstract,抽象类通常包含若干个(可为零个)抽象方法;但不能在 非抽象类中声明抽象方法,抽象类不能创建对象,创建对象的工作由抽象类派生的 非抽象子类来实现,抽象类可以包含非抽象类所能包含的任何元素,这些要 素包含具体的属性、非抽象方法以及多个重载的构造方法,关于抽象类的说明,抽象类中不可包含抽象构造方法或抽象静态方法,抽象类中可以没有抽象方法,有抽象方法的类一定是抽象类,若一个类中包含了至少一个抽象方法,则该类必须被声 明为抽象类;但声明为抽象类的类不一定要包含抽象方法,抽象类必须被子类继承,并由子类实现它的所有抽象方法,没有所谓的最终抽象类,即抽象类不能再用final修饰类声明,关于抽象类的说明(续),不能创建abstract类的实例。然而可以创建一个引用型变量,其类型为 一个抽象类,并让它指向非抽象子类的一个实例,抽象类中不能定义private类型的成员变量和成员方法,若一个子类继承了一个抽象类,该子类没有实现抽象类中定义的每一个 抽象方法,则该类仍然为抽象类,必须在它的类定义语句中加上abstract 抽象修饰符。直到某个子类实现了它所有祖先类声明的抽象方法,该类 才不再是抽象类,才能够生成实例对象,关于抽象类的说明(续),抽象类的意义,抽象类实现自然界的抽象概念,体现数据抽象的思想, 是实现程序多态性的一种手段,抽象类是类层次中较高层次的概括,抽象类能让其子 类继承它的抽象化的特征,抽象类从更高级别上描述概念性的内容,抽象类中可 以包括被其所有子类共享的公共属性与公共行为,有 利于对所要解决问题的概念层次关系的组织与设计,抽象类提供了可由其子类共享的一般形式,能够更好 地统一用户接口,抽象类是其所有子类公共属性的集合,可以充分利用 这些公共属性来提高程序开发和维护的效率 AbstractClassDemo.java,任务4-接口,【任务内容】 设计一块电脑主板支持各种PCI设备扩展卡 【能力目标】 了解接口的作用 掌握接口的定义 学会运用接口解决实际问题 【任务分析】 当主板厂商设计一块电脑主板时需要考虑到如何让主板支持各种各样的扩展卡来增强电脑的功能,如显卡、打印卡、声卡、网卡等等。那么厂商是如何设计电脑主板的?,4.3 抽象类与接口,范例:Computer .java Java编程语言中禁止多继承属性,但可以通过接口来帮助类扩展方法。 接口中可以定义大量的常量和方法,但其中的方法只是一种签名,没有具体的实现 。,接口的定义,定义接口要使用interface关键字。接口的定义包括接口头部声明与接口体定义两部分。 接口定义的格式为: /接口头部声明 接口修饰符 interface extends ,接口的定义(续),/接口体定义 /常量数据成员声明 public static final =; /抽象方法声明 public abstract native ()throws ; ,修饰符 class implements 。/类的成员要素定义 ,接口的实现,接口的实现,实现接口的声明位置要在类定义的头部声明中, implements关键字表明一个类要实现的接口列表,一个类可以实现一个接口,也可同时实现多个接 口,对于包含多个接口的接口名列表,各接口名 字之间用逗号分开,实现接口的类可以使用接口中定义的所有常量,如果实现接口的类是抽象类,它可以不实现接 口中定义的所有抽象方法,接口的实现(续),如果实现接口的类不是抽象类,则在类体中必须实现接口的所 有抽象方法,为所有抽象方法定义方法体,类在实现接口的抽象方法时,必须使用完全一致的方法原型,接口的抽象方法的访问修饰符只能为public,这就决定了实现 接口的类在实现接口方法时,必须显式地使用public修饰符, 而不能使用其他限制更为严格的访问修饰符(如protected等), 否则将被系统警告为缩小了接口定义方法的访问控制范围,子类可以直接继承使用接口基类中的各种方法,并能够超越(抑制) 或重载它们,接口类型与接口变量,接口可以作为一种引用数据类型来使用,称这种引用数据类型为接口类型。可以定义接口类型的引用变量,该引用变量被称为接口变量。接口变量可以用作方法的形参,也可以作为全局变量或局部变量来使用。Java中,还可以声明接口类型的数组。 Java中,允许用接口变量来引用实现接口的类对象或子类对象。例 :InterfaceDemo.java,接口与抽象类的区别与联系,任务5-内部类应用,【任务内容】 设计一个集合类,可以注册元素删除、添加事件 【能力目标】 了解内部类 掌握内部类的语法及应用 学会用内部类解决实际问题 【任务分析】 本案例要求设计一个用于存储Object类型对象的集合,并且在集合上删除和增加元素时触发添加和删除操作的事件。事件处理器由用户动态添加和删除,且事件处理器的类型已经在集合内部定义好,用户只需要继承该处理器从而设计出符合实际需求的事件处理器。,4.4 内部类,范例:InnerClassExam.java 内部类就是把一个类的声明放在另外一个类的内部,作为其成员存在。内部类是一种非常有用的特性,因为它允许你把一些逻辑相关的类组织在一起,并控制在内部的类的可视性。内部类可以任意访问所在类内部的成员而不受访问限定的影响。 类内部的类可以是静态的,也可以是非静态的 :,静态内部类定义语法如下 : class 外部类 类成员 public static class 内部类 内部类成员 静态内部类实例化对象的语法: 外部类.内部类 内部类对象 = new 外部类.内部类();,静态内部类定义有如下约束: 静态成员类不能与外部类重名 不能直接访问外部类的实例字段和实例方法 不能定义于外部类的某个函数中,非静态内部类定义语法如下: class 外部类 类成员 public class 内部类 内部类成员 外部类 外部类对象 = new 外部类(); 外部类.内部类 内部类对象 = 外部类对象.new 内部类();,非静态内部类定义有如下约束: 1)成员类不能与外部类重名 2)不能在成员类中定义static字段、方法和类(static final形式的常量定义除外)。 3)成员类不能是接口,任务6-垃圾回收,【任务内容】配置文件类对象在销毁时关闭文件读写流 【能力目标】了解垃圾回收机制 【任务分析】 许多大型应用程序的运行特性都需要靠配置文件进行配置,系统中往往会存在一个专门解析配置文件的类,该类或许会产生一个文件IO流与配置文件绑定,在配置类对象销毁时,同时也应当关闭与配置文件绑定的IO流。那么,何时断开这种IO绑定是一个比较难以抉择的问题。,4.5 对象的垃圾回收机制,范例:ObjectGCExam.java GC即垃圾回收机制是指JVM用于释放那些不再使用的对象所占用的内存。Java语言并不要求JVM有GC,也没有规定GC如何工作。不过常用的JVM都有GC,而且大多数GC都使用类似的算法管理内存和执行收集操作。,任务7-用jar文件发布应用程序,【任务内容】将项目1中的案例应用程序打包成可运行jar包 【能力目标】 了解Jar打包工具的使用 了解如何发布Java应用程序 了解如何运行Jar程序 【任务分析】 java应用程序中的每一个类都会产生一个class文件,当程序的规模非常庞大时,类文件数量是相当多的。然而如何便捷的管理和发布这些类文件是一件头疼的事情。 JavaSDK中提供了专门用于打包java程序类文件的工具jar应用程序。Jar应用程序可以将所有类文件和相关资源打包成一个以.jar结尾的单一文件,便于发布和传播java程序。Jar命令也可打包具备可执行能力的jar包。我们可以用jar命令将前几节编写的程,4.6 使用jar文件,1.将所有的class文件和相关资源文件统一放在指定文件夹CMyApp下 c:MyAppPerson.class c:MyAppStr2IntExam.class 2.打开cmd命令行切换至MyApp目录下 c: cd MyApp c:MyApp 3.运行jar命令将程序打包成Str2IntExam.jar c:MyApp jar cvfe Str2IntExam.jar Str2IntExam *.class 4.运行Str2IntExam.jar 应用程序 c:MyApp java jar Str2IntExam.jar Andy 26,Jar命令格式如下: jar ctxu vfm0M jar-file manifest-file entry-point -C dir files ctxu为命令选项,必选其一。各选项含义如下: -c创建新的归档文件 -t列出归档目录 -x从档案中提取指定(或所有)文件 -u更

温馨提示

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

评论

0/150

提交评论