分享
分销 收藏 举报 申诉 / 58
播放页_导航下方通栏广告

类型第四讲 Java面向对象高级特性.ppt

  • 上传人:pc****0
  • 文档编号:13355469
  • 上传时间:2026-03-06
  • 格式:PPT
  • 页数:58
  • 大小:249.50KB
  • 下载积分:10 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    第四讲 Java面向对象高级特性 第四 Java 面向 对象 高级 特性
    资源描述:
    单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第五章,Java,面向对象高级特性,3/6/2026,1,本章要点,Static,、,final,关键字,抽象类,接口,包,内部类,访问控制,其它,3/6/2026,2,5.1 static,关键字,用,static(,静态的,),修饰的变量或方法又称为类变量和类方法。,类变量(静态变量),在成员变量声明时使用,static,关键字。,注意点:,类变量只在系统加载其所在类时分配空间并,初始化,实例化对象时不再分配空间,所有,实例对象将共享类的静态变量。,用途 可以用来在实例对象之间进行通信,3/6/2026,3,类似于其他语言中的全局变量,可以用类,名直接调用。,如:,Count.counter,例题,5-1 static,成员变量举例(,P115,),类方法(静态方法),在类的,成员方法声明中带有,static,关键字,,访问时可通过类名访问,例题,5-2 static,方法举例(,P117,),类名,Static,变量,3/6/2026,4,注意点,静态方法只能访问方法体内定义的局部变量、自己的参数和静态变量。(因静态方法不是通过调用对象实例,故在静态方法中没有,this,指针),子类不能重写父类的静态方法,不能将非静态方法重写为静态的方法。,main(),是一个静态方法,是程序的入口点可以使,JVM,不创建实例对象就可以运行方法。,3/6/2026,5,静态初始化程序,类中不属于任何方法体中,并以,static,关键字修饰的语句块。,如:,static,I=5;,System.out.println(“Static,code:I=”+I+);,注意,静态语句块只在加载类时执行一次,通常用来,进行类成员变量的初始化。,例题,5-3,:静态语句块与静态变量的访问。,3/6/2026,6,5.2 final,关键字,在,Java,中,可以用,final,关键字声明类、成员,方法、成员变量。,被定义成,final,的类不能再派生子类如:,Java.lang.String,为一个,final,类。,被定义为,final,的方法不能重写,优点是在运行时进行效率优化。,被定义为,final,的变量只能被赋值一次,常,用来定义常量,变量名一般大写。,例题,5-4 final,变量在构造方法中赋值,3/6/2026,7,5.3,抽象类,抽象方法 只有定义而没有方法体的方法。,抽象类 包含一个或多个抽象方法的类。,定义抽象类的格式为:,abstract class,抽象类名,注意点,抽象类不能实例化。可派生子类,在子类中,具体定义方法的功能,。,3/6/2026,8,目的是为一类对象建立抽象的模型,在同类对象所对应的体系中抽象类往往位距顶层。,使类的设计变的清晰、支持多态、为类的体,系提供通用的接口。,3/6/2026,9,Employee e=new Manager();/,正确,Employee e=new Employee();/,错误,abstract class Employee,abstract void,raiseSallory(int,i);,Class Manager extends Employee,void,raiseSallory(int,i);,3/6/2026,10,5.4,接口,接口定义格式,:,修饰符,interface,接口名,extends,父接,接口体,;,修饰符为,public,时,指明任何类均可以使,用这个接口。,修饰符缺省时,只有与该接口定义在同一,个包中的类才可以访问该接口,3/6/2026,11,接口的实现与使用,implements,关键字用来表示实现某个接口,,在类体中可以使用接口中定义的常量,且须,实现接口中定义的所有方法。,一个类可以实现多个接口,在,implements,中,用“,”,分隔。例如:,Public interface Flyer,public void takeoff();,public void land();,public void fly();,3/6/2026,12,Public class Airplane implements Flyer,public void takeoff(),/,实现起飞的操作,public void land(),/,下落,public void fly()/,起飞,例题,5-5,:通过接口实现多态示例,.,3/6/2026,13,多重继承,Java,中规定一个类只能继承一个父类,但可以实现多个接口,,Java,是,利用接口实现多重继承的。,父类,方法,interface_1 interface2 interface_n,抽象或具体父类,Interface_1,Interface_2,Interface_n,子类,3/6/2026,14,通过继承扩展接口,通过创建接口的子接口来增加新的方法。,如:,Interface Shape,void draw();,void erase();,interface ShapeArea extends Shape,double area();,3/6/2026,15,接口与抽象类,两者有一定的相似,又有区别,接口中方法都是抽象的,而抽象类中可以定义带有方法体的不同方法,一个类可以实现多个接口,而只可继承一个抽象父类,接口不是类体系的一部分,即与实现它的类不构成继承体系。抽象类通常位于类体系顶层。,接口可用于多重继承。,3/6/2026,16,5.5,包,包的,概念,Java,中包是相关类与接口的一个集合,它提供了命名空间的管理和访问。包具有特定的访问控制权限。,Java,中编译器把包对应于文件系统的目录和文件管理,还可以使用压宿文件的格式存储。,JDK,中提供的包有,Java.applet,Java.awt,Java.event,等。,例如:名为,Java.applet,的包,中,所有类文件都存储在目录,classpathjavaapplet,下,这里,classpath,由,环境变量来设定。,3/6/2026,17,包,机制的优点,易,根据包中类的功能找到所需要的类,包中的类是相关的。,每个包都是命名空间,不同包中类的名字不冲突。,同一个包中的类之间有比较宽松的访问机制。,包的定义与使用,定义用关键字,package,如:,package graphics;,说明:,.,package,语句指定某类加入,graphics,包,并存放路径,为,classpathgraphics,3/6/2026,18,.,如,原文件中没有,package,语句,则指定为无名包,通常放在源文件的目录下。,.package,只能有一条,并在源程序的第一行。,.,一个类只能属于一个包,.,包名以“,.”,为分隔符,3/6/2026,19,使用包成员,import,语句放在源程序的前面,如:,import graphics.circle/,引入包中的,Circle,类,import graphics.*/,引入包中所有的类,如果没有用,import,语句引入包的类,则可用长名,引用类,格式:包名,.,类名,如:,graphics.circle mycircle=new graphics.circle(),通常没有必要这样做。,3/6/2026,20,包,使用示例,例,5.6,定义二维几何图形的包并使用,3/6/2026,21,5.6,访问控制,Java,中有四中不同的访问权限,private-,私有的,protected-,受保护的,public-,公开的 缺省(,default,),权限,修饰符,同一类,同一包,子类,全局,private,Y,default,Y,Y,protected,Y,Y,Y,public,Y,Y,Y,Y,3/6/2026,22,5.7,内部类,内部类是在一个类的定义中定义的类,也称为嵌套类。,内部类可作为外包类(包容类)的一个成员使用,可以访问外包类的所有成员(包括带有,static,、,private,的成员变量和方法)。,例题,5-8,内部类访问外包类成员(,P139,),例题,5-9,内部类通过修饰符访问同名外包类成员(,P140,),3/6/2026,23,在外包类的语句块中定义内部类,内部类可以定义在一个方法体的语句块中定义,这时内部类可以访问语句块中的局部变量,但只限于在该语句块运行期内,当该方法运行结束后内部类对象将不能访问所在语句块中的局部变量。,例题,5-10,3/6/2026,24,在外包类以外的其他类中访问内部类,对于可在外包类之外访问的内部类,引用内部类时必须使用完整的标识:,外包名,.,内部类名,假设,B,是,A,的内部类则有,A a=new A(),A.B b=a.new B(),例题,5-11,在外包类之外访问内部类,3/6/2026,25,内部类的特点,:,内部类可以使用它所在类的静态成员变量、实例成员变量和方法中的局部变量。,内部类的修饰符有,abstract,,,private,或,protected,。,内部类可作为其他类的成员。,3/6/2026,26,5.8,其它,基本数据类型的包装类,集合类,3/6/2026,27,5.8.1,基本数据包装类,基本数据类型在,java.lang,包中都有一个,wrapper,类。,基本数据类型,Wrapper,类,基本数据类型,Wrapper,类,boolean,Boolean,char,Character,byte,Byte,long,Long,short,Short,float,Float,int,Integer,double,Double,3/6/2026,28,每个包装类中提供了有用的,方法,和,常量,MIN_VALUE MAX_VALUE,数据类型的转换,Integer,wint,=new Integer(18);,int,p=,wint.intValue,();,int,x=Integer.valueof(“123”).intValue();,int,y=Integer.parseInt(“123”);,String s=(new Integer(125).toString();,3/6/2026,29,8.2,集合类,集合包含一组对象。在这个对象中存放指向其他对象的引用,Java Collection API,的核心接口,colletion,List,Set,SortedSet,Map,SortedMap,3/6/2026,30,Collection,Collection,Collection,接口是集合接口的根,它定义了集合的通用,API,。,JDK,中没有提供该接口的实现类,而是提供了它的子接口。例如:,SET,和,LIST,Set,set,中的元素不能重复,是数学中集合的抽象,List,List,是一个有序的集合,称为列表或序列。可以包含重复的元素,矢量,Vector,就是一种常用的,List,。,3/6/2026,31,Map,Map,实现键值到值的映射。,Map,中不能包含重复的键值,每个键值最多只能映射到一个值。,Hashtable,就是一个常用的,Map,。,SortedSet,和,SortedMap,SortedSet,和,SortedMap,分别是具有排序性能的,Set,和,Map,。,3/6/2026,32,几种常用的集合,Set,Set,继承了接口,Collection,接口,包含的方法都是从,Collection,接口继承而来。包含方法见,P145,在,JDK,中实现了,Set,接口的实用类有:,HashSet,类,TreeSet,类,LinkedHashset,类。,HashSet,类是采用,Hash,表实现了,Set,接口。其中元素存储在一个,Hash,表中,并且这些元素没有固定的顺序。由于采用,Hash,表,当集合中元素数量较大时其访问效率比线性表要快。,3/6/2026,33,实现,Set,的示例,例题,5-12,Set,的示例,import,java.util,.*;,public class,FindDups,public static void,main(String,args,),Set s=new,HashSet,();/,创建一个,HashSet,对象,缺省的初始容量是,16,。,for(,int,i=0;i,args.length,;i+),/,将命令行中的每个字符串加入到集合,s,中,其中重复的字符串将不能加入,并被打印输出。,if(!,s.add(argsi,),System.out.println(Duplicate,detected:+,argsi,);,System.out.println(s.size,()+distinct words detected:+s);/,输出集合,s,的元素个数以及集合中的所有元素。,3/6/2026,34,TreeSet,TreeSet,类实现了,SortedSet,接口,采用树型结构存储集合中的元素,,TreeSet,对象中元素按照升序排序。,LinkedHashSet,LinkedHashSet,类实现了,Set,接口,采用,Hash,表和链表相结合的结构存储元素。它结合了,HashSet,和,TreeSet,的优点,既能保证集合中元素的顺序又能保证有较高的存取效率。,3/6/2026,35,List,List,是一种有序的集合,它继承了,Collection,接口同时又增加了操作,按位置存取元素,查找,遍历,子,List,的截取,List,接口的定义,P147,3/6/2026,36,JDK,中提供了实现,List,接口的三个类:,ArrayList,类、,LinkList,类和,Vector,类。,ArrayList,类,ArrayList,类采用可变大小的数组实现,List,接口。,增加了访问数组大小的方法。,ArrayList,对象会随着元,素的增加而容积自动扩大。,ArrayList,是三种类中效率,最高的也是最常用的。,例题:,5-13 List,使用的示例,3/6/2026,37,LinkList,类,LinkList,类采用链表结构实现,List,接口。除了实现,List,接口中的方法外还提供了在链表的头和尾进行,get,、,remove,和,insert,等操作。利用这些操作可以用来实现象数据结构中的堆栈、队列等数据结构。,Vector,类,采用可变体积的数组实现,List,接口。该类同数组一样可以通过索引序号对所包含的元素进行访问。,3/6/2026,38,Map,Map,包含了一系列键值和值之间的映射关系。一个,Map,对象可以看成是 一个键值和值对的集合,可以在该集合中通过一个键找到对应的值。键和值可以是任意的对象。,Map,接口独立于,Collection,接口体系的,,Map,接口的定义如,P149,。,3/6/2026,39,实现的,5,个,Map,接口的实用类,HashMap,类、,HashTable,类,、,TreeMap,类,、,WeekHashMap,类、,IdentityHashMap,类,HashMap,类和,HashTable,类,都使用,Hash,表实现,Map,接口,两者基本等价。,TreeMap,类,采用有序树的结构实现,Map,接口,同,TreeMap,相类似。该类按照键的升序的次序排列元素。,WeekHashMap,类,与,HashMap,类相类似,但,WeekHashMap,类中的键,值在不被使用时会自动删除,由垃圾收集器回收。,3/6/2026,40,IdentityHashMap,类,其特殊之处是在比较两个键值是否相同是,比较的是键的引用,而不是键对象自身。,上述,Map,类中,,HashMap,(无序的,Map,),TreeMap,(有序的,Map,),例题,5-14,:利用,Map,进行单词词频的统计。,3/6/2026,41,集合元素的遍历,Java,CollectionsAPI,为集合提供了,Iterator,(,重复器,),用来遍历集合中的元素。其中的方法可以使我们向前遍历所有类型的集合。,对一个,Set,对象的遍历次序是不确定的。,对,List,对象的遍历次序是从前向后。而其子接口,ListIterator,支持从后向前的反向遍历。,3/6/2026,42,Iterator,接口包含两个接口,Iterator,和,ListIterator,public interface,Iterator,boolean,hasNext,();,Object next();,Void remove();/,删除当前遍历到的元素,即删除最近一次,next(),或,Previous,()调用返回的元素。,3/6/2026,43,ListIterator,public interface,ListIterator,extends,Iterator,boolean,hasNext,();,Object next();,boolean,hasPrevious,();,object previous();,int,nextIndex,();,int,previousIndex,();,remove();,void,set(object,o);/,可以改变当前遍历到的元素,void,add(object,o);/,在下一个将要取得的元素之前插入新的元素。,3/6/2026,44,例题,5-15,:,ListIterator,的使用示例,3/6/2026,45,枚举、自动装箱和静态导入,枚举,枚举,enumeration,是许多编程语言都有的,但早期的版本并没有提供枚举。其原因就是枚举不是必需的。,但是在日常生活中非常常见,在,J2SE5(2004,年发布,),添加了枚举类型。,3/6/2026,46,enum,Transport,CAR,TRUCK,AIRPLANE,TRAIN,BOAT,Transport,tp,;,tp,=Transport.AIRPLANE;,可以使用的场合,if(tp,=Transport.TRAIN),switch(tp,),case CAR:,case TRUCK:,注意:在,case,中,枚举常量没有使用枚举类型名来限定。,3/6/2026,47,例题:,enum,Transport,CAR,TRUCK,AIRPLANE,TRAIN,BOAT,class,EnumDemo,public static void,main(String,args,),Transport,tp,;,tp,=Transport.AIRPLANE;,System.out.println(“value,of,tp”+tp,);,tp,=Transport.TRAIN;,if(tp,=Transport.TRAIN),System.out.println(“tp,contains Train.”);,3/6/2026,48,switch(tp,),case CAR,System.out.println(“A,car carries,people.”);break,;,case TRUCK:,System.out.println(“A,truck carries,freight.”);break,;,case AIRPLANE:,System.out.println(“A,airplane,flies.”);break,;,case TRAIN:,System.out.println(“A,train runs on,rails.”);break,;,case BOAT:,System.out.println(“A,boat sails on,water.”);break,;,Value of,tp,:,AIRPLANE,Tp,contains,TRAIN.,A,tarin,runs on rails.,3/6/2026,49,Java,的枚举类型是类类型,从前面的例题可见,枚举类型为类类型。但不使用,new,实例化,enum,。如:,Transport,tp,;,tp,=Transport.AIRPLANE;,例题,5-16,:,3/6/2026,50,values(),和,valueof,(),方法,所有的枚举类型自动地拥有方法:,values(),valueof,(),方法。其形式如下:,public static,enum,-type values(),返回一个包含枚举常量列表的数组,public static,enum,-type,valueof(String,str,),返回一个枚举常量,其值对应于传递给,Str,的字符串。,例题,5-17,:,3/6/2026,51,构造方法、方法、实例变量和枚举,每个枚举常量是一个枚举型的对象;,枚举类型可以定义构造函数,添加方法。,例题,5-18,:,3/6/2026,52,自动装箱和自动拆箱,包装类,Integer,iob,=new Integer(100);,int,i=,iob.intValue,();,称为手工装箱、手工拆箱,Integer,iob,=10);,int,i=,iob,;,称为自动装箱、自动拆箱,3/6/2026,53,静态导入,import static,java.lang.Math.sqrt,;,import static,java.lang.Math.pow,;,x=sqrt(144);,y=pow(b,2);,import static,java.lang.Math,.*;,注意:不能滥用,会导致命名冲突。,3/6/2026,54,泛型,参数化类型,一个简单的范型示例,5-20,泛型代码的优点是可以自动地处理传递给其类型参数的数据类型,不管应用了什么数据类型,许多算法在逻辑上都是相同的。例如:快速排序算法不管其排序项目是整型、字符型、,OBJECT,或,THREAD,其逻辑都是相同的。,泛型的语法格式,class class-name/,定义,class-name=,new class-name(cons-,arg,-list),3/6/2026,55,范型只能用于对象,Gen,intob,=new Gen(53);/,错误,范型类不同于普通类的对象,iob,=,strob,/Wrong!,可以带有多个参数,例题,5-21,:带有两个类型参数的范型类,约束类型,例如:,3/6/2026,56,泛型方法,boolean,arrayEqual,(,T,x,V,y),if(x.length,!=,y.length,)return false;,for(int,i=0;ix.,length;i,+),if(xi,!=,yi,)return false;,return true;,3/6/2026,57,范型接口,Interface Containment,boolean,contains(T,o);,/,实现范型接口的类自身必须是范型的,Class,MyClass,implements Containment,T,arrayRef,;,MyClass(T,o)arrayRef,=o;,boolean,contains(T,o);,3/6/2026,58,
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:第四讲 Java面向对象高级特性.ppt
    链接地址:https://www.zixin.com.cn/doc/13355469.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork