Java面向对象高级特性.ppt

上传人:max****ui 文档编号:6366560 上传时间:2020-02-24 格式:PPT 页数:58 大小:249.55KB
返回 下载 相关 举报
Java面向对象高级特性.ppt_第1页
第1页 / 共58页
Java面向对象高级特性.ppt_第2页
第2页 / 共58页
Java面向对象高级特性.ppt_第3页
第3页 / 共58页
点击查看更多>>
资源描述
2020 2 24 1 第五章 Java面向对象高级特性 2020 2 24 2 本章要点 Static final关键字抽象类接口包内部类访问控制其它 2020 2 24 3 5 1static关键字 用static 静态的 修饰的变量或方法又称为类变量和类方法 类变量 静态变量 在成员变量声明时使用static关键字 注意点 类变量只在系统加载其所在类时分配空间并初始化 实例化对象时不再分配空间 所有实例对象将共享类的静态变量 用途可以用来在实例对象之间进行通信 2020 2 24 4 类似于其他语言中的全局变量 可以用类名直接调用 如 Count counter例题5 1static成员变量举例 P115 类方法 静态方法 在类的成员方法声明中带有static关键字 访问时可通过类名访问例题5 2static方法举例 P117 类名 Static变量 2020 2 24 5 注意点静态方法只能访问方法体内定义的局部变量 自己的参数和静态变量 因静态方法不是通过调用对象实例 故在静态方法中没有this指针 子类不能重写父类的静态方法 不能将非静态方法重写为静态的方法 main 是一个静态方法 是程序的入口点可以使JVM不创建实例对象就可以运行方法 2020 2 24 6 静态初始化程序类中不属于任何方法体中 并以static关键字修饰的语句块 如 static I 5 System out println Staticcode I I 注意静态语句块只在加载类时执行一次 通常用来进行类成员变量的初始化 例题5 3 静态语句块与静态变量的访问 2020 2 24 7 5 2final关键字 在Java中 可以用final关键字声明类 成员方法 成员变量 被定义成final的类不能再派生子类如 Java lang String为一个final类 被定义为final的方法不能重写 优点是在运行时进行效率优化 被定义为final的变量只能被赋值一次 常用来定义常量 变量名一般大写 例题5 4final变量在构造方法中赋值 2020 2 24 8 5 3抽象类 抽象方法只有定义而没有方法体的方法 抽象类包含一个或多个抽象方法的类 定义抽象类的格式为 abstractclass抽象类名 注意点抽象类不能实例化 可派生子类 在子类中具体定义方法的功能 2020 2 24 9 目的是为一类对象建立抽象的模型 在同类对象所对应的体系中抽象类往往位距顶层 使类的设计变的清晰 支持多态 为类的体系提供通用的接口 2020 2 24 10 Employeee newManager 正确Employeee newEmployee 错误 abstractclassEmployee abstractvoidraiseSallory inti ClassManagerextendsEmployee voidraiseSallory inti 2020 2 24 11 5 4接口 接口定义格式 修饰符 interface接口名 extends父接 接口体 修饰符为public时 指明任何类均可以使用这个接口 修饰符缺省时 只有与该接口定义在同一个包中的类才可以访问该接口 2020 2 24 12 接口的实现与使用implements关键字用来表示实现某个接口 在类体中可以使用接口中定义的常量 且须实现接口中定义的所有方法 一个类可以实现多个接口 在implements中用 分隔 例如 PublicinterfaceFlyer publicvoidtakeoff publicvoidland publicvoidfly 2020 2 24 13 PublicclassAirplaneimplementsFlyer publicvoidtakeoff 实现起飞的操作 publicvoidland 下落 publicvoidfly 起飞 例题5 5 通过接口实现多态示例 2020 2 24 14 多重继承 Java中规定一个类只能继承一个父类 但可以实现多个接口 Java是利用接口实现多重继承的 父类方法interface 1interface2 interface n 抽象或具体父类 Interface 1 Interface 2 Interface n 子类 2020 2 24 15 通过继承扩展接口 通过创建接口的子接口来增加新的方法 如 InterfaceShape voiddraw voiderase interfaceShapeAreaextendsShape doublearea 2020 2 24 16 接口与抽象类 两者有一定的相似 又有区别接口中方法都是抽象的 而抽象类中可以定义带有方法体的不同方法一个类可以实现多个接口 而只可继承一个抽象父类接口不是类体系的一部分 即与实现它的类不构成继承体系 抽象类通常位于类体系顶层 接口可用于多重继承 2020 2 24 17 5 5包 包的概念Java中包是相关类与接口的一个集合 它提供了命名空间的管理和访问 包具有特定的访问控制权限 Java中编译器把包对应于文件系统的目录和文件管理 还可以使用压宿文件的格式存储 JDK中提供的包有Java appletJava awtJava event等 例如 名为Java applet的包中 所有类文件都存储在目录classpath java applet下 这里classpath由环境变量来设定 2020 2 24 18 包机制的优点 易根据包中类的功能找到所需要的类 包中的类是相关的 每个包都是命名空间 不同包中类的名字不冲突 同一个包中的类之间有比较宽松的访问机制 包的定义与使用定义用关键字package如 packagegraphics 说明 package语句指定某类加入graphics包 并存放路径为classpath graphics 2020 2 24 19 如原文件中没有package语句 则指定为无名包 通常放在源文件的目录下 package只能有一条 并在源程序的第一行 一个类只能属于一个包 包名以 为分隔符 2020 2 24 20 使用包成员 import语句放在源程序的前面如 importgraphics circle 引入包中的Circle类importgraphics 引入包中所有的类如果没有用import语句引入包的类 则可用长名引用类格式 包名 类名如 graphics circlemycircle newgraphics circle 通常没有必要这样做 2020 2 24 21 包使用示例 例5 6定义二维几何图形的包并使用 2020 2 24 22 5 6访问控制 Java中有四中不同的访问权限private 私有的protected 受保护的public 公开的缺省 default 2020 2 24 23 5 7内部类 内部类是在一个类的定义中定义的类 也称为嵌套类 内部类可作为外包类 包容类 的一个成员使用 可以访问外包类的所有成员 包括带有static private的成员变量和方法 例题5 8内部类访问外包类成员 P139 例题5 9内部类通过修饰符访问同名外包类成员 P140 2020 2 24 24 在外包类的语句块中定义内部类 内部类可以定义在一个方法体的语句块中定义 这时内部类可以访问语句块中的局部变量 但只限于在该语句块运行期内 当该方法运行结束后内部类对象将不能访问所在语句块中的局部变量 例题5 10 2020 2 24 25 在外包类以外的其他类中访问内部类 对于可在外包类之外访问的内部类 引用内部类时必须使用完整的标识 外包名 内部类名假设B是A的内部类则有Aa newA A Bb a newB 例题5 11在外包类之外访问内部类 2020 2 24 26 内部类的特点 内部类可以使用它所在类的静态成员变量 实例成员变量和方法中的局部变量 内部类的修饰符有abstract private或protected 内部类可作为其他类的成员 2020 2 24 27 5 8其它基本数据类型的包装类集合类 2020 2 24 28 5 8 1基本数据包装类 基本数据类型在java lang包中都有一个wrapper类 2020 2 24 29 每个包装类中提供了有用的方法和常量 MIN VALUEMAX VALUE数据类型的转换Integerwint newInteger 18 intp wint intValue intx Integer valueof 123 intValue inty Integer parseInt 123 Strings newInteger 125 toString 2020 2 24 30 8 2集合类 集合包含一组对象 在这个对象中存放指向其他对象的引用 JavaCollectionAPI的核心接口 2020 2 24 31 Collection CollectionCollection接口是集合接口的根 它定义了集合的通用API JDK中没有提供该接口的实现类 而是提供了它的子接口 例如 SET和LISTSetset中的元素不能重复 是数学中集合的抽象ListList是一个有序的集合 称为列表或序列 可以包含重复的元素 矢量Vector就是一种常用的List 2020 2 24 32 MapMap实现键值到值的映射 Map中不能包含重复的键值 每个键值最多只能映射到一个值 Hashtable就是一个常用的Map SortedSet和SortedMapSortedSet和SortedMap分别是具有排序性能的Set和Map 2020 2 24 33 几种常用的集合 SetSet继承了接口Collection接口 包含的方法都是从Collection接口继承而来 包含方法见P145在JDK中实现了Set接口的实用类有 HashSet类TreeSet类LinkedHashset类 HashSet类是采用Hash表实现了Set接口 其中元素存储在一个Hash表中 并且这些元素没有固定的顺序 由于采用Hash表 当集合中元素数量较大时其访问效率比线性表要快 2020 2 24 34 实现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的元素个数以及集合中的所有元素 2020 2 24 35 TreeSetTreeSet类实现了SortedSet接口 采用树型结构存储集合中的元素 TreeSet对象中元素按照升序排序 LinkedHashSetLinkedHashSet类实现了Set接口 采用Hash表和链表相结合的结构存储元素 它结合了HashSet和TreeSet的优点 既能保证集合中元素的顺序又能保证有较高的存取效率 2020 2 24 36 ListList是一种有序的集合 它继承了Collection接口同时又增加了操作按位置存取元素查找遍历子List的截取List接口的定义P147 2020 2 24 37 JDK中提供了实现List接口的三个类 ArrayList类 LinkList类和Vector类 ArrayList类ArrayList类采用可变大小的数组实现List接口 增加了访问数组大小的方法 ArrayList对象会随着元素的增加而容积自动扩大 ArrayList是三种类中效率最高的也是最常用的 例题 5 13List使用的示例 2020 2 24 38 LinkList类LinkList类采用链表结构实现List接口 除了实现List接口中的方法外还提供了在链表的头和尾进行get remove和insert等操作 利用这些操作可以用来实现象数据结构中的堆栈 队列等数据结构 Vector类采用可变体积的数组实现List接口 该类同数组一样可以通过索引序号对所包含的元素进行访问 2020 2 24 39 Map Map包含了一系列键值和值之间的映射关系 一个Map对象可以看成是一个键值和值对的集合 可以在该集合中通过一个键找到对应的值 键和值可以是任意的对象 Map接口独立于Collection接口体系的 Map接口的定义如P149 2020 2 24 40 实现的5个Map接口的实用类HashMap类 HashTable类 TreeMap类 WeekHashMap类 IdentityHashMap类HashMap类和HashTable类都使用Hash表实现Map接口 两者基本等价 TreeMap类采用有序树的结构实现Map接口 同TreeMap相类似 该类按照键的升序的次序排列元素 WeekHashMap类与HashMap类相类似 但WeekHashMap类中的键 值在不被使用时会自动删除 由垃圾收集器回收 2020 2 24 41 IdentityHashMap类其特殊之处是在比较两个键值是否相同是 比较的是键的引用 而不是键对象自身 上述Map类中 HashMap 无序的Map TreeMap 有序的Map 例题5 14 利用Map进行单词词频的统计 2020 2 24 42 集合元素的遍历 JavaCollectionsAPI为集合提供了Iterator 重复器 用来遍历集合中的元素 其中的方法可以使我们向前遍历所有类型的集合 对一个Set对象的遍历次序是不确定的 对List对象的遍历次序是从前向后 而其子接口ListIterator支持从后向前的反向遍历 2020 2 24 43 Iterator接口包含两个接口 Iterator和ListIteratorpublicinterfaceIterator booleanhasNext Objectnext Voidremove 删除当前遍历到的元素 即删除最近一次next 或Previous 调用返回的元素 2020 2 24 44 ListIteratorpublicinterfaceListIteratorextendsIterator booleanhasNext Objectnext booleanhasPrevious objectprevious intnextIndex intpreviousIndex remove voidset objecto 可以改变当前遍历到的元素voidadd objecto 在下一个将要取得的元素之前插入新的元素 2020 2 24 45 例题5 15 ListIterator的使用示例 2020 2 24 46 枚举 自动装箱和静态导入 枚举枚举 enumeration是许多编程语言都有的 但早期的版本并没有提供枚举 其原因就是枚举不是必需的 但是在日常生活中非常常见 在J2SE5 2004年发布 添加了枚举类型 2020 2 24 47 enumTransport CAR TRUCK AIRPLANE TRAIN BOAT Transporttp tp Transport AIRPLANE 可以使用的场合if tp Transport TRAIN switch tp caseCAR caseTRUCK 注意 在case中 枚举常量没有使用枚举类型名来限定 2020 2 24 48 例题 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 2020 2 24 49 switch 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 AIRPLANETpcontainsTRAIN Atarinrunsonrails 2020 2 24 50 Java的枚举类型是类类型 从前面的例题可见 枚举类型为类类型 但不使用new实例化enum 如 Transporttp tp Transport AIRPLANE 例题5 16 2020 2 24 51 values 和valueof 方法 所有的枚举类型自动地拥有方法 values valueof 方法 其形式如下 publicstaticenum type values 返回一个包含枚举常量列表的数组publicstaticenum typevalueof Stringstr 返回一个枚举常量 其值对应于传递给Str的字符串 例题5 17 2020 2 24 52 构造方法 方法 实例变量和枚举 每个枚举常量是一个枚举型的对象 枚举类型可以定义构造函数 添加方法 例题5 18 2020 2 24 53 自动装箱和自动拆箱 包装类Integeriob newInteger 100 inti iob intValue 称为手工装箱 手工拆箱Integeriob 10 inti iob 称为自动装箱 自动拆箱 2020 2 24 54 静态导入 importstaticjava lang Math sqrt importstaticjava lang Math pow x sqrt 144 y pow b 2 importstaticjava lang Math 注意 不能滥用 会导致命名冲突 2020 2 24 55 泛型 参数化类型一个简单的范型示例5 20泛型代码的优点是可以自动地处理传递给其类型参数的数据类型 不管应用了什么数据类型 许多算法在逻辑上都是相同的 例如 快速排序算法不管其排序项目是整型 字符型 OBJECT或THREAD其逻辑都是相同的 泛型的语法格式classclass name 定义class name newclass name cons arg list 2020 2 24 56 范型只能用于对象Genintob newGen 53 错误范型类不同于普通类的对象iob strob Wrong 可以带有多个参数例题5 21 带有两个类型参数的范型类约束类型例如 2020 2 24 57 泛型方法 booleanarrayEqual T x V y if x length y length returnfalse for inti 0 i x length i if x i y i returnfalse returntrue 2020 2 24 58 范型接口 InterfaceContainment booleancontains To 实现范型接口的类自身必须是范型的ClassMyClassimplementsContainment T arrayRef MyClass T o arrayRef o booleancontains To
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!