资源描述:
《java核心课件2-第1章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Java2核心技术Ⅱ主讲教师:殷黎E_mail:yl_zwn@yahoo.com.cn本书课程安排第1章泛型第2章枚举第3章集合框架第4章实用类第5章网络编程基础第6章JDBC第7章JavaBean第8章Swing第9章RMI第1章泛型了解泛型相关概念;会创建泛型类和泛型方法;了解通配符和受限泛型;能熟练使用泛型类。1.1泛型概述首先分析、使用1-3页的例子程序;这是一个实现可动态扩展的数组的程序,且能存放任意类型的数据;从使用中可以看到,存放的数据取出来用时,必须强制转化为它的实际类型;这样不能保证程序类型的安全,增加了程序出错的几率,而且带
2、来了麻烦;因此java中引入了“泛型”的概念。publicclassObjectGroup{privateObject[]elements;privateintsize;publicObjectGroup(){init();}privatevoidinit(){elements=newObject[10];size=0;}publicvoidadd(Objectobj){if(size>=elements.length){Object[]temp=newObject[elements.length*2];System.arraycopy(ele
3、ments,0,temp,0,elements.length);elements=temp;}elements[size]=obj;size++;}publicvoidclear(){init();}publicObject[]getElements(){Object[]temp=newObject[size];System.arraycopy(elements,0,temp,0,size);returntemp;}publicObjectget(intindex){returnelements[index];}publicintgetSize
4、(){returnsize;}}泛型(Generics)本质上就是提供类型的”类型参数”,它们也被称为参数化类型(parameterizedtype)或参量多态(parametricpolymorphism);也指具有在多种数据类型上皆可操作的含义;声明时用参数化类型代替,使用时指定具体类型;GJ(GenericJava)是对Java语言的一种扩展,用GJ编写的程序看起来和普通Java程序基本相同,只不过多了一些参数化的类型同时少了一些类型转换;实际上,编译时这些GJ程序也是首先被转化成一般的不带泛型的Java程序后再进行处理的;泛型的特点:类
5、型安全、向后兼容、层次清晰、性能收益1.2泛型类泛型类就是具有一个或多个类型参数的类;1-4页代码中尖括号中的内容就代表类型参数,多个类型参数用“,”隔开;类型参数就跟在方法中普通的参数一样。就像一个方法有“形参”来描述它操作的参数的种类,一个泛型也有“形式类型参数”;当一个方法被调用,“实参”替换“形参”,方法被执行;当一个泛型声明被调用,“实际类型参数”取代“形式类型参数”;类型参数通常用单个大写字母命名;一般:E表示集合的元素类型,T表示任意类型,K,V表示表的键和值;类型参数一定是类类型;publicclassGenericGroup<
6、E>{privateE[]elements;privateintsize;publicGenericGroup(){init();}privatevoidinit(){elements=(E[])newObject[10];size=0;}publicvoidadd(Eobj){if(size>=elements.length){E[]temp=(E[])newObject[elements.length*2];System.arraycopy(elements,0,temp,0,elements.length);elements=temp;}
7、elements[size]=obj;size++;}publicvoidclear(){init();}publicObject[]getElements(){E[]temp=(E[])newObject[size];System.arraycopy(elements,0,temp,0,size);returntemp;}publicEget(intindex){returnelements[index];}publicintgetSize(){returnsize;}}1.2.1泛型类的使用声明:class类名<类型参数>{//类体}使用:
8、类名<实际类型>变量名=new类名<实际类型>();1.2.2泛型类的局限类型参数不能实例化:newE();//error不能实例化类型参数的数组:E