版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章Java面向对象高级特性10/15/20221第五章Java面向对象高级特性10/11/20221本章要点Static、final关键字抽象类接口包内部类访问控制其它10/15/20222本章要点Static、final关键字10/11/2022§5.1static关键字用static(静态的)修饰的变量或方法又称为类变量和类方法。类变量(静态变量)在成员变量声明时使用static关键字。注意点:类变量只在系统加载其所在类时分配空间并初始化,实例化对象时不再分配空间,所有实例对象将共享类的静态变量。用途可以用来在实例对象之间进行通信10/15/20223§5.1static关键字用static(静态的)修饰的类似于其他语言中的全局变量,可以用类名直接调用。如:Count.counter例题5-1static成员变量举例(P115)类方法(静态方法)在类的成员方法声明中带有static关键字,访问时可通过类名访问例题5-2static方法举例(P117)类名Static变量10/15/20224类似于其他语言中的全局变量,可以用类类名St注意点静态方法只能访问方法体内定义的局部变量、自己的参数和静态变量。(因静态方法不是通过调用对象实例,故在静态方法中没有this指针)子类不能重写父类的静态方法,不能将非静态方法重写为静态的方法。main()是一个静态方法,是程序的入口点可以使JVM不创建实例对象就可以运行方法。
10/15/20225注意点10/11/20225静态初始化程序类中不属于任何方法体中,并以static关键字修饰的语句块。如:static{I=5;System.out.println(“Staticcode:I=”+I++);}注意静态语句块只在加载类时执行一次,通常用来进行类成员变量的初始化。例题5-3:静态语句块与静态变量的访问。10/15/20226静态初始化程序10/11/202265.2final关键字在Java中,可以用final关键字声明类、成员方法、成员变量。被定义成final的类不能再派生子类如:Java.lang.String为一个final类。被定义为final的方法不能重写,优点是在运行时进行效率优化。被定义为final的变量只能被赋值一次,常用来定义常量,变量名一般大写。例题5-4final变量在构造方法中赋值10/15/202275.2final关键字在Java中,可以用final关键字5.3抽象类抽象方法只有定义而没有方法体的方法。抽象类包含一个或多个抽象方法的类。定义抽象类的格式为:abstractclass抽象类名{……}注意点
抽象类不能实例化。可派生子类,在子类中具体定义方法的功能。10/15/202285.3抽象类抽象方法只有定义而没有方法体的方法。10/11
目的是为一类对象建立抽象的模型,在同类对象所对应的体系中抽象类往往位距顶层。使类的设计变的清晰、支持多态、为类的体系提供通用的接口。10/15/20229目的是为一类对象建立抽象的模型,在同类对象所对应的体系中Employeee=newManager();//正确Employeee=newEmployee();//错误abstractclassEmployee{abstractvoidraiseSallory(inti);}ClassManagerextendsEmployee{voidraiseSallory(inti){……};}10/15/202210Employeee=newManager();5.4接口接口定义格式:[修饰符]interface接口名[extends父接]{接口体;}修饰符为public时,指明任何类均可以使用这个接口。修饰符缺省时,只有与该接口定义在同一个包中的类才可以访问该接口10/15/2022115.4接口接口定义格式:10/11/202211接口的实现与使用implements关键字用来表示实现某个接口,在类体中可以使用接口中定义的常量,且须实现接口中定义的所有方法。一个类可以实现多个接口,在implements中用“,”分隔。例如:
PublicinterfaceFlyer{publicvoidtakeoff();publicvoidland();publicvoidfly();}10/15/202212接口的实现与使用PublicinterfaceFlyePublicclassAirplaneimplementsFlyer{publicvoidtakeoff(){//实现起飞的操作}publicvoidland(){//下落}publicvoidfly(){//起飞}}例题5-5:通过接口实现多态示例.10/15/202213PublicclassAirplaneimplemen多重继承Java中规定一个类只能继承一个父类,但可以实现多个接口,Java是利用接口实现多重继承的。父类方法interface_1interface2……interface_n抽象或具体父类Interface_1Interface_2Interface_n子类10/15/202214多重继承Java中规定一个类只能继承一个父类,但可以实现多个通过继承扩展接口通过创建接口的子接口来增加新的方法。如:InterfaceShape{voiddraw();voiderase();}interfaceShapeAreaextendsShape{doublearea();}10/15/202215通过继承扩展接口通过创建接口的子接口来增加新的方法。Inte接口与抽象类两者有一定的相似,又有区别接口中方法都是抽象的,而抽象类中可以定义带有方法体的不同方法一个类可以实现多个接口,而只可继承一个抽象父类接口不是类体系的一部分,即与实现它的类不构成继承体系。抽象类通常位于类体系顶层。接口可用于多重继承。10/15/202216接口与抽象类两者有一定的相似,又有区别10/11/20225.5包包的概念Java中包是相关类与接口的一个集合,它提供了命名空间的管理和访问。包具有特定的访问控制权限。Java中编译器把包对应于文件系统的目录和文件管理,还可以使用压宿文件的格式存储。JDK中提供的包有Java.appletJava.awtJava.event等。例如:名为Java.applet的包中,所有类文件都存储在目录classpath\java\applet下,这里classpath由环境变量来设定。10/15/2022175.5包包的概念10/11/202217包机制的优点易根据包中类的功能找到所需要的类,包中的类是相关的。每个包都是命名空间,不同包中类的名字不冲突。同一个包中的类之间有比较宽松的访问机制。包的定义与使用定义用关键字package如:packagegraphics;说明:
.package语句指定某类加入graphics包,并存放路径为classpath\graphics10/15/202218包机制的优点易根据包中类的功能找到所需要的类,包中的类是相关.如原文件中没有package语句,则指定为无名包,通常放在源文件的目录下。.package只能有一条,并在源程序的第一行。.一个类只能属于一个包.包名以“.”为分隔符10/15/202219.如原文件中没有package语句,则指定为无名包,通常放使用包成员import语句放在源程序的前面如:importgraphics.circle//引入包中的Circle类importgraphics.*//引入包中所有的类如果没有用import语句引入包的类,则可用长名引用类格式:包名.类名如:graphics.circlemycircle=newgraphics.circle()通常没有必要这样做。10/15/202220使用包成员import语句放在源程序的前面10/11/20包使用示例例5.6定义二维几何图形的包并使用
10/15/202221包使用示例例5.6定义二维几何图形的包并使用10/11/205.6访问控制Java中有四中不同的访问权限private-私有的protected-受保护的public-公开的缺省(default)权限修饰符同一类同一包子类全局privateYdefaultY
Yprotected
Y
YYpublic
Y
YYY10/15/2022225.6访问控制Java中有四中不同的访问权限权限5.7内部类内部类是在一个类的定义中定义的类,也称为嵌套类。内部类可作为外包类(包容类)的一个成员使用,可以访问外包类的所有成员(包括带有static、private的成员变量和方法)。例题5-8内部类访问外包类成员(P139)例题5-9内部类通过修饰符访问同名外包类成员(P140)10/15/2022235.7内部类内部类是在一个类的定义中定义的类,也称为嵌套类在外包类的语句块中定义内部类内部类可以定义在一个方法体的语句块中定义,这时内部类可以访问语句块中的局部变量,但只限于在该语句块运行期内,当该方法运行结束后内部类对象将不能访问所在语句块中的局部变量。例题5-1010/15/202224在外包类的语句块中定义内部类内部类可以定义在一个方法体的语句在外包类以外的其他类中访问内部类对于可在外包类之外访问的内部类,引用内部类时必须使用完整的标识:外包名.内部类名假设B是A的内部类则有Aa=newA()A.Bb=a.newB()例题5-11在外包类之外访问内部类10/15/202225在外包类以外的其他类中访问内部类对于可在外包类之外访问的内部内部类的特点:内部类可以使用它所在类的静态成员变量、实例成员变量和方法中的局部变量。内部类的修饰符有abstract,private或protected。内部类可作为其他类的成员。10/15/202226内部类的特点:10/11/2022265.8其它基本数据类型的包装类集合类10/15/2022275.8其它10/11/2022275.8.1基本数据包装类基本数据类型在java.lang包中都有一个wrapper类。
基本数据类型Wrapper类基本数据类型Wrapper类booleanBooleancharCharacterbyteBytelongLongshortShortfloatFloatintIntegerdoubleDouble10/15/2022285.8.1基本数据包装类基本数据类型在java.lan每个包装类中提供了有用的方法和常量MIN_VALUEMAX_VALUE数据类型的转换
Integerwint=newInteger(18);intp=Value();intx=Integer.valueof(“123”).intValue();inty=Integer.parseInt(“123”);Strings=(newInteger(125)).toString();10/15/202229每个包装类中提供了有用的方法和常量MIN_VALUEMAX8.2集合类集合包含一组对象。在这个对象中存放指向其他对象的引用JavaCollectionAPI的核心接口colletionListSetSortedSetMapSortedMap10/15/2022308.2集合类集合包含一组对象。在这个对象中存放指向其他对象的CollectionCollection
Collection接口是集合接口的根,它定义了集合的通用API。JDK中没有提供该接口的实现类,而是提供了它的子接口。例如:SET和LISTSet
set中的元素不能重复,是数学中集合的抽象ListList是一个有序的集合,称为列表或序列。可以包含重复的元素,矢量Vector就是一种常用的List。10/15/202231CollectionCollection10/11/2022MapMap实现键值到值的映射。Map中不能包含重复的键值,每个键值最多只能映射到一个值。Hashtable就是一个常用的Map。SortedSet和SortedMapSortedSet和SortedMap分别是具有排序性能的Set和Map。10/15/202232Map10/11/202232几种常用的集合Set
Set继承了接口Collection接口,包含的方法都是从Collection接口继承而来。包含方法见P145在JDK中实现了Set接口的实用类有:HashSet类TreeSet类LinkedHashset类。HashSet类是采用Hash表实现了Set接口。其中元素存储在一个Hash表中,并且这些元素没有固定的顺序。由于采用Hash表,当集合中元素数量较大时其访问效率比线性表要快。10/15/202233几种常用的集合Set10/11/202233实现Set的示例例题5-12Set的示例importjava.util.*;publicclassFindDups{publicstaticvoidmain(Stringargs[]){Sets=newHashSet();//创建一个HashSet对象,缺省的初始容量是16。
for(inti=0;i<args.length;i++){ //将命令行中的每个字符串加入到集合s中,其中重复的字符串将不能加入,并被打印输出。if(!s.add(args[i]))System.out.println("Duplicatedetected:"+args[i]);}System.out.println(s.size()+"distinctwordsdetected:"+s);//输出集合s的元素个数以及集合中的所有元素。}}10/15/202234实现Set的示例例题5-12Set的示例importjaTreeSet
TreeSet类实现了SortedSet接口,采用树型结构存储集合中的元素,TreeSet对象中元素按照升序排序。LinkedHashSetLinkedHashSet类实现了Set接口,采用Hash表和链表相结合的结构存储元素。它结合了HashSet和TreeSet的优点,既能保证集合中元素的顺序又能保证有较高的存取效率。10/15/202235TreeSet10/11/202235List
List是一种有序的集合,它继承了Collection接口同时又增加了操作按位置存取元素查找遍历子List的截取List接口的定义P14710/15/202236List10/11/202236JDK中提供了实现List接口的三个类:ArrayList类、LinkList类和Vector类。ArrayList类
ArrayList类采用可变大小的数组实现List接口。增加了访问数组大小的方法。ArrayList对象会随着元素的增加而容积自动扩大。ArrayList是三种类中效率最高的也是最常用的。例题:5-13List使用的示例10/15/202237JDK中提供了实现List接口的三个类:10/11/2022LinkList类LinkList类采用链表结构实现List接口。除了实现List接口中的方法外还提供了在链表的头和尾进行get、remove和insert等操作。利用这些操作可以用来实现象数据结构中的堆栈、队列等数据结构。Vector类采用可变体积的数组实现List接口。该类同数组一样可以通过索引序号对所包含的元素进行访问。10/15/202238LinkList类10/11/202238MapMap包含了一系列键值和值之间的映射关系。一个Map对象可以看成是一个键值和值对的集合,可以在该集合中通过一个键找到对应的值。键和值可以是任意的对象。Map接口独立于Collection接口体系的,Map接口的定义如P149。10/15/202239MapMap包含了一系列键值和值之间的映射关系。一个Map实现的5个Map接口的实用类
HashMap类、HashTable类、TreeMap类、WeekHashMap类、IdentityHashMap类HashMap类和HashTable类都使用Hash表实现Map接口,两者基本等价。TreeMap类采用有序树的结构实现Map接口,同TreeMap相类似。该类按照键的升序的次序排列元素。WeekHashMap类与HashMap类相类似,但WeekHashMap类中的键——值在不被使用时会自动删除,由垃圾收集器回收。10/15/202240实现的5个Map接口的实用类10/11/202240IdentityHashMap类其特殊之处是在比较两个键值是否相同是,比较的是键的引用,而不是键对象自身。上述Map类中,HashMap(无序的Map)TreeMap(有序的Map)例题5-14:利用Map进行单词词频的统计。10/15/202241IdentityHashMap类10/11/202241集合元素的遍历JavaCollectionsAPI为集合提供了Iterator(重复器)用来遍历集合中的元素。其中的方法可以使我们向前遍历所有类型的集合。对一个Set对象的遍历次序是不确定的。对List对象的遍历次序是从前向后。而其子接口ListIterator支持从后向前的反向遍历。10/15/202242集合元素的遍历JavaCollectionsAPI为集合提Iterator接口包含两个接口Iterator和ListIterator
publicinterfaceIterator{booleanhasNext();Objectnext();Voidremove();//删除当前遍历到的元素,即删除最近一次next()或Previous()调用返回的元素。}10/15/202243Iterator接口包含两个接口Iterator和ListListIteratorpublicinterfaceListIteratorextendsIterator{booleanhasNext();Objectnext();booleanhasPrevious();objectprevious();intnextIndex();intpreviousIndex();remove();voidset(objecto);//可以改变当前遍历到的元素voidadd(objecto);//在下一个将要取得的元素之前插入新的元素。}10/15/202244ListIterator10/11/202244例题5-15:ListIterator的使用示例10/15/202245例题5-15:ListIterator的使用示例10/11枚举、自动装箱和静态导入枚举枚举——enumeration是许多编程语言都有的,但早期的版本并没有提供枚举。其原因就是枚举不是必需的。但是在日常生活中非常常见,在J2SE5(2004年发布)添加了枚举类型。10/15/202246枚举、自动装箱和静态导入枚举10/11/202246enumTransport{CAR,TRUCK,AIRPLANE,TRAIN,BOAT}
Transporttp;tp=Transport.AIRPLANE;可以使用的场合if(tp==Transport.TRAIN)……switch(tp){caseCAR:……caseTRUCK:…………}注意:在case中,枚举常量没有使用枚举类型名来限定。10/15/202247enumTransport{10/11/202247例题:enumTransport{CAR,TRUCK,AIRPLANE,TRAIN,BOAT}classEnumDemo{publicstaticvoidmain(Stringargs[]){Transporttp;tp=Transport.AIRPLANE;System.out.println(“valueoftp”+tp);tp=Transport.TRAIN;if(tp==Transport.TRAIN)System.out.println(“tpcontainsTrain.”);10/15/202248例题:enumTransport{10/11/202248switch(tp){caseCARSystem.out.println(“Acarcarriespeople.”);break;caseTRUCK:System.out.println(“Atruckcarriesfreight.”);break;caseAIRPLANE:System.out.println(“Aairplaneflies.”);break;caseTRAIN:System.out.println(“Atrainrunsonrails.”);break;caseBOAT:System.out.println(“Aboatsailsonwater.”);break;}}}Valueoftp:AIRPLANETpcontains
TRAIN.Atarinrunsonrails.10/15/202249switch(tp){Valueoftp:AIRPLAJava的枚举类型是类类型从前面的例题可见,枚举类型为类类型。但不使用new实例化enum。如:
Transporttp;tp=Transport.AIRPLANE;例题5-16:10/15/202250Java的枚举类型是类类型从前面的例题可见,枚举类型为类类型values()和valueof()方法所有的枚举类型自动地拥有方法:values()valueof()方法。其形式如下:publicstaticenum-type[]values()返回一个包含枚举常量列表的数组publicstaticenum-typevalueof(Stringstr)返回一个枚举常量,其值对应于传递给Str的字符串。例题5-17:10/15/202251values()和valueof()方法所有的枚举构造方法、方法、实例变量和枚举每个枚举常量是一个枚举型的对象;枚举类型可以定义构造函数,添加方法。例题5-18:10/15/202252构造方法、方法、实例变量和枚举每个枚举常量是一个枚举型的对象自动装箱和自动拆箱包装类Integeriob=newInteger(100);inti=Value();称为手工装箱、手工拆箱Integeriob=10);inti=iob;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 暖场活动2024年度摄影摄像服务合同
- 二零二四年度金融咨询服务合同2篇
- 工程设计咨询合同范本2篇
- 门窗合作简单版合同范本
- 2024版工程项目合作开发合同2篇
- 人教版九年级化学第四单元复习课件
- 人教版九年级化学第十一单元酸、碱、盐专题复习(一)酸、碱、盐化学性质归纳分层作业课件
- 建筑工程文明施工协议书
- 2024年度化工厂车间改造与安全设备采购合同2篇
- 收费站新员工培训
- 2023年国家公务员考试《申论》真题(副省卷)及答案解析
- 《品牌推广策划案N》课件
- 智慧旅游景区建设规划方案
- 代办消防验收合同范本共22024年
- 电缆隧道施工合同
- 苏教版五年级语文习作5省公开课获奖课件市赛课比赛一等奖课件
- 2023年中考英语模拟卷(河南专用)(原卷版)
- 2024-2025学年福建省百校联考高三上学期10月测评物理试题及答案
- 2024-2030年日化包装行业十四五竞争格局分析及投资前景与战略规划研究报告
- 电气工程及其自动化职业规划课件
- 集团公司信息安全管理制度
评论
0/150
提交评论