第8章 泛型与集合ppt课件

上传人:我*** 文档编号:149211217 上传时间:2020-10-25 格式:PPT 页数:114 大小:1.36MB
返回 下载 相关 举报
第8章 泛型与集合ppt课件_第1页
第1页 / 共114页
第8章 泛型与集合ppt课件_第2页
第2页 / 共114页
第8章 泛型与集合ppt课件_第3页
第3页 / 共114页
第8章 泛型与集合ppt课件_第4页
第4页 / 共114页
第8章 泛型与集合ppt课件_第5页
第5页 / 共114页
点击查看更多>>
资源描述

《第8章 泛型与集合ppt课件》由会员分享,可在线阅读,更多相关《第8章 泛型与集合ppt课件(114页珍藏版)》请在金锄头文库上搜索。

1、第八章 泛型与集合,理解泛型的概念 掌握泛型类的创建和使用 理解泛型的有界类型和通配符的使用,了解泛型的限制 理解Java集合框架的结构、迭代器接口 掌握常用接口及实现类的使用 了解集合转换,掌握集合工具类的使用,本章重点,本章任务是充分利用泛型集合知识对“Q-DMS数据挖掘”系统的数据采集、过滤分析以及输出显示功能进行迭代升级:,任务驱动,【任务8-1】使用泛型集合迭代升级数据分析接口和数据过滤抽象类。 【任务8-2】使用泛型集合迭代升级日志数据分析类。 【任务8-3】使用泛型集合迭代升级物流数据分析类。 【任务8-4】在日志和物流业务类中增加显示泛型集合数据的功能。 【任务8-5】使用泛型

2、集合迭代升级主菜单驱动并运行测试,学习路线,本章目标,从JDK 5.0开始,Java引入“参数化类型(parameterized type)”的概念,这种参数化类型称为“泛型(Generic)”。泛型是将数据类型参数化,即在编写代码时将数据类型定义成参数,这些类型参数在使用之前再进行指明。泛型提高了代码的重用性,使得程序更加灵活、安全和简洁。,8.1 泛型,在JDK 5.0之前,为了实现参数类型的任意化,都是通过Object类型来处理。但这种处理方式所带来的缺点是需要进行强制类型转换,此种强制类型转换不仅使代码臃肿,而且要求程序员必须对实际所使用的参数类型已知的情况下才能进行,否则容易引起Cl

3、assCastException异常。,8.1.1 泛型定义,从JDK 5.0开始,Java增加对泛型的支持。使用泛型之后就不会出现上述问题。泛型的好处是在程序编译期会对类型进行检查,捕捉类型不匹配错误,以免引起ClassCastException异常;而且泛型不需要进行强制转换,数据类型都是自动转换的。 泛型经常使用在类、接口和方法的定义中,分别称为泛型类、泛型接口和泛型方法。泛型类是引用类型,在内存堆中。,定义泛型类的语法:,访问符 class 类名 /类体. ,类型参数只是占位符,一般使用大写的“T”、“U”、“V”等作为类型参数,可以由多个类型参数组成,多个类型参数之间使用“,”隔开,

4、【示例】泛型类:,class Node private T data; public Node next; /省略. ,在实例化泛型类时,需要指定类型参数的具体类型,例如Integer、String或一个自定义的类等。 实例化泛型类的语法:,类名 对象 = new 类名 (构造方法参数列表);,【示例】实例化泛型类:,Node myNode = new Node ();,从Java 7开始,实例化泛型类时只需给出一对尖括号“”即可,Java可以推断尖括号中的泛型信息。将两个尖括号放在一起像一个菱形,因此也被称为“菱形”语法,该语法实例化泛型类的格式如下: 示例:,类名 对象 = new 类名

5、(构造方法参数列表);,Node myNode = new Node ();,示例代码Generic.java:,public class Generic private T data; public Generic(T data) this.data = data; public void showDataType() System.out.println(数据的类型是: “+data.getClass().getName(); ,私有属性data的数据类型采用泛型,该方法显示data属性的具体类型名称,测试代码GenericDemo.java:,Generic strObj = new G

6、eneric(欢迎使用泛型类!); strObj.showDataType(); System.out.println(strObj.getData(); System.out.println(-); / 定义泛型类的一个Double版本 /使用Java 7“菱形”语法实例化泛型 Generic dObj = new Generic(3.1415); dObj.showDataType(); System.out.println(dObj.getData();,测试结果如下:,数据的类型是: java.lang.String 欢迎使用泛型类! - 数据的类型是: java.lang.Doubl

7、e 3.1415,当使用一个泛型类时(包括声明泛型变量和创建泛型实例对象两种情况),都应该为此泛型类传入一个实参,否则编译器会提出泛型警告。假设现在定义一个方法,该方法的参数需要使用泛型,但类型参数是不确定的,此时如果考虑使用Object类型来解决,编译时则会出现错误。,8.1.2 通配符,以之前定义的泛型类Generic为例,考虑代码NoWildcardDemo.java :,/ 泛型类Generic的类型参数使用Object public static void myMethod(Generic g) g.showDataType(); public static void main(St

8、ring args) / 参数类型是Integer Generic gint = new Generic(12); / 这里将产生一个错误 myMethod(gint); ,编译时产生类型不匹配的错误,程序无法运行,上述代码出现的问题,可以使用通配符解决;通配符是由“?”来表示一个未知类型,从而解决类型被限制、不能动态根据实例进行确定的缺点。,下述代码使用通配符“?”重新实现上述处理过程,实现处理各种类型参数的情况, UseWildcardDemo.java 代码如下:,/ 泛型类Generic的类型参数使用Object public static void myMethod(Generic

9、g) g.showDataType(); public static void main(String args) / 参数类型是Integer Generic gint = new Generic(12); myMethod(gint); ,运行结果如下:,数据的类型是: java.lang.Integer,泛型的类型参数可以是各种类型,但有时候需要对类型参数的取值进行一定程度的限制,以便类型参数在指定范围内。针对这种情况,Java提供了“有界类型”,来限制类型参数的取值范围。有界类型分两种: 使用extends关键字声明类型参数的上界; 使用super关键字声明类型参数的下界。,8.1.3

10、 有界类型,使用extends关键字可以指定类型参数的上界,限制此类型参数必须继承自指定的父类或父类本身。被指定的父类则称为类型参数的“上界(upper bound)”。 类型参数的上界可以在定义泛型时进行指定,也可以在使用泛型时进行指定。,上界,语法:,上界,/定义泛型时指定类型参数的上界 访问符 class 类名 /类体. /使用泛型时指定类型参数的上界 泛型类,【示例】类型参数的上界:,Java中Number类是一个抽象类,所有数值类都继承此抽象类,即Integer、Long、Float、Double等用于数值操作的类都继承Number类。,/定义泛型时指定类型参数的上界 public

11、class Generic /类体. /使用泛型时指定类型参数的上界 Generic,注意,上界,类型参数必须是Number类的子类(也可以是Number本身),代码UpBoundGenericDemo.java(代码1)演示使用类型参数的上界:,class UpBoundGeneric private T data; public UpBoundGeneric(T data) this.data = data; public void showDataType() System.out.println(数据的类型是: + data.getClass().getName(); ,上界,UpBo

12、undGenericDemo.java(代码2):,public class UpBoundGenericDemo / 使用泛型Generic时指定其类型参数的上界 public static void myMethod(Generic g) g.showDataType(); public static void main(String args) Generic gint = new Generic(12); myMethod(gint); Generic gstr = new Generic(“String”); /myMethod(gstr); /UpBoundGeneric ubgs

13、tr = new UpBoundGeneric(指定上界); ,上界,类型参数不是Number的子类时会产生错误,类型参数不是Number的子类时会产生错误,使用super关键字可以指定类型参数的下界,限制此类型参数必须是指定的类型本身或其父类,直至Object类。被指定的类则称为类型参数的“下界(lower bound)”。 类型参数的下界通常在使用泛型时进行指定,其语法格式如下所示: 【示例】类型参数的下界:,泛型类,下界,Generic,代码UpBoundGenericDemo.java演示使用类型参数的下界:,/ 使用泛型Generic时指定其类型参数的下界 public static

14、 void myMethod(Generic g) g.showDataType(); public static void main(String args) / 参数类型是String Generic gstr = new Generic(“String类本身”); myMethod(gstr); / 参数类型是Integer Generic gint = new Generic(12); / myMethod(gint); ,下界,Integer不是String本身或其父类,编译会报错,泛型中使用extends关键字限制类型参数必须是指定的类本身或其子类,而super关键字限制类型参数必

15、须是指定的类本身或其父类。在泛型中经常使用extends关键字指定上界,而很少使用super关键字指定下界。,注意,下界,Java语言没有真正实现泛型。Java程序在编译时生成的字节码中是不包涵泛型信息的,泛型的类型信息将在编译处理时被擦除掉,这个过程称为类型擦除。这种实现理念造成Java泛型本身有很多漏洞,虽然Java 8对类型推断进行了改进,但依然需要对泛型的使用上做一些限制,其中大多数限制都是由类型擦除和转换引起的。 Java对泛型的限制如下: 泛型的类型参数只能是类类型(包括自定义类),不能是简单类型; 同一个泛型类可以有多个版本(不同参数类型),不同版本的泛型类的实例是不兼容的,例如

16、:“Generic”与“Generic”的实例是不兼容的;,8.1.4 泛型的限制,定义泛型时,类型参数只是占位符,不能直接实例化,例如:“new T()”是错误的; 不能实例化泛型数组,除非是无上界的类型通配符,例如:“Generic a = new Generic 10”是错误的,而“Generic a = new Generic 10”是被允许的; 泛型类不能继承Throwable及其子类,即泛型类不能是异常类,不能抛出也不能捕获泛型类的异常对象,例如:“class GenericException extends Exception”、“catch(T e)”都是错误的。,Java的集合类是一些常用的数据结构,例如:队列、栈、链表等

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号