版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
人民邮电出版社10集合、反射和注解Java程序设计第章C目录ONTENTS10.2反射10.3注解10.4小结10.1集合10.1.1集合类框架结构Java提供的集合不是一个类,而是一系列的接口、抽象类和具体的实现类。主要有两个系列,一个是Collection系列,一个是Map系列。Collection系列的用于存储和处理集合元素是单个数据的情况。而Map系列的用于存储和处理元素是键值对的集合。Collection系列的又分为两类,一类是可重复、注重顺序的List子系,一类是不可重复相对不注重顺序的set子系。10.1.1集合类框架结构10.1.1集合类框架结构实线边框的是实现类,如ArrayList,LinkedList,HashMap等短划线边框的是抽象类,如AbstractCollection,AbstractList,AbstractMap等点线边框的是接口,如Collection,List,Map等。Java中的集合类主要从Collection和Map两个接口派生。10.1.2List接口List接口的定义形式:publicinterfaceList<E>extendsCollection<E>List是有序集合,可以准确地控制元素在集合中的插入位置,可以通过索引获得集合中的元素,可以通过元素获得元素在集合中的位置。它的主要方法如表10.1所示。10.1.2List接口表10.1List接口中的主要方法类型方法名方法功能booleanadd(Ee)把元素e加到表的尾部voidadd(int
index,E
e)把元素e加到表的index位置,原index位置元素顺序后移booleanequals(Object
o)比较对象o是否与表中的元素是同一元素Eget(int
index)得到表中index位置的元素booleanindexOf(Objecto)判断元素o在表中是否存在。如果不存在,则返回-1Iterator<E>iterator()获得表的遍历器Eremove(int
index)将表中第index位置的元素删除booleanremove(Object
o)删除表中与o相同的元素intsize()得到表中元素的个数ArrayList类的定义形式:publicclassArrayList<E>extendsAbstractList<E>implementsList<E>,RandomAccess,Cloneable,Serializable10.1.3ArrayList类【例10.1】ArrayList类的使用。Example10_01.java10.1.4LinkedList类LinkedList类的定义形式:publicclassLinkedList<E>extendsAbstractSequentialList<E>implementsList<E>,Deque<E>,Cloneable,Serializable10.1.4LinkedList类【例10.2】LinkedList类的使用。Example10_2.java10.1.5Set接口Set接口的定义形式为:publicinterfaceSet<E>extendsCollection<E>Set接口也是Collection的一种扩展,与List不同的是,在Set中的对象元素不能重复,也就是说不能把同样的东西两次放入同一个Set容器中。它的常用具体实现有HashSet和TreeSet类。10.1.5Set接口10.1.6HashSet类HashSet类的定义形式:publicclassHashSet<E>extendsAbstractSet<E>implementsSet<E>,Cloneable,Serializable【例10.3】HashSet的使用。Example10_03.javaHashSet类按照哈希算法来存取对象。当向集合中加入一个新对象时,会调用对象的hashCode()方法得到对象的哈希码,然后根据这个码计算出对象在集合中存储的位置。HashSet对象中不能存储相同的数据,存储数据是无序的。10.1.7Map接口Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射。对于键对象来说,像Set一样,一个Map容器中的键对象不允许重复,这是为了保持查找结果的一致性。当然在使用过程中,某个键所对应的值对象可能会发生变化,这时会按照最后一次修改的值对象与键对应。对于值对象则没有唯一性的要求。可以将任意多个键都映射到一个值对象上,这不会发生任何问题。Map接口的定义形式:publicinterfaceMap<K,V>10.1.7Map接口10.1.8HashMap类Map有两种比较常用的实现:HashMap和TreeMap。HashMap用的是哈希码的算法,以便快速查找一个键,TreeMap则是对键按序存放,因此它还有一些扩展的方法,比如firstKey(),lastKey()等,还可以从TreeMap中指定一个范围以取得其子Map。HashMap是日常开发中,用的最多的集合类之一。HashMap类的定义形式:publicclassHashMap<K,V>extendsAbstractMap<K,V>implementsMap<K,V>,Cloneable,Serializable【例10.4】HashMap类的使用。Example10_04.java10.1.9集合的遍历虽然对于不同类型的具体集合类可能会有特定的遍历方式,但也提供了共性的方法,主要有普通for、增强型的for和iterator方式来遍历集合。【例10.6】关于Map类型集合的遍历。Example10_06.java【例10.5】List与Set类型集合的遍历。Example10_05.java10.1.10聚合操作1.聚合操作简介Stream是一个接口,可以将集合或数组中的元素转换为Stream流的形式。在对流进行处理时,不同的流操作以级联的方式形成处理流水线。一个流水线由一个源,以及0到多个中间操作和一个终结操作构成。这个流水线也被称为管道流。聚合操作是通过Stream流处理实现的。但要注意它和java.io包下的InputStream和OutputStream没有什么关系。源:源是流中元素的来源。Java提供了很多内置的源,包括数组、集合、生成函数、无限序列生成器和I/O通道等。中间操作:中间操作是在一个流上进行操作,返回结果也是一个流。这些操作是延迟执行的。终结操作:终结操作通过遍历流来产生一个结果或是某些作用。在一个流上执行终结操作之后,该流被消费,无法再次被使用。10.1.10聚合操作2.流对象的创建(1)所有的Collections集合都可以使用stream()静态方法获取Stream流对象;需要说明的是,虽然Map接口中并没有stream()方法,但是Map的values()和keySet()均返回集合对象,在集合对象上当然是可以使用stream()方法的。(2)Arrays数组工具类的stream()静态方法也可以获取数组元素的Stream流对象。(3)Stream接口的of()静态方法可以获取基本类型包装类数组、引用类型数组和单个元素的Stream流对象;实际上of()方法内部其实调用了Arrays.stream()方法实现的。(4)Stream.iterate创建流的方式(5)Stream.generate创建流的方式(6)使用流行的APIs,如Ppile().splitAsStream()10.1.10聚合操作上面前三种在创建流之前,对象的大小(长度)已经确认,所以这种流也被成为有限流。而通过Stream.iterate和Stream.generate创建流的方式,是无限大小的流(generate最大是Long.MAX_VALUE),也被称为无限流。2.流对象的创建【例10.7】流对象的几种创建方式。Example10_07.java10.1.10聚合操作每个中间操作,又会返回一个Stream,比如.filter()又返回一个Stream,中间操作是“懒”操作,并不会真正进行遍历。流中间操作在应用到流上,返回一个新的流。常用的流中间操作如表10.8所示。3.中间操作10.1.10聚合操作3.中间操作10.1.10聚合操作终结操作可以遍历流进而生成结果或直接消费,而后该流不能再被使用。几乎在所有情况下,终结操作都是立即执行的,在返回之前完成对数据源的遍历和对管道的处理。终结操作才真正进行遍历行为,前面的中间操作也在这个时候,才真正的执行。4.终结操作10.1.10聚合操作
4.终结操作10.1.10聚合操作5.聚合操作案例【例10.8】流对象的几种创建方式。Example10_08.javaC目录ONTENTS10.2反射10.3注解10.4小结10.1集合10.2反射在程序运行过程中,对于任意一个对象,都能够知道这个对象所在类的所有属性和方法,都能够调用它的任意一个方法和访问它的任意一个属性,这种动态调用对象的方法及动态获取的信息的功能称为Java语言的反射机制。与反射有关的类包括Class类、Constructor类、Field类和Method类,它们可以统称反射类。反射可以实现程序的动态效果。通过反射,可以在程序运行过程中知道程序中使用了哪些类及类中的属性和方法。注解用于在程序编译、运行时解析和使用,起到说明配置作用。10.2反射Class类在包java.lang中。Class类的定义形式:1.Class类publicfinalclassClass<T>extendsObjectimplementsSerializable,GenericDeclaration,Type,AnnotatedElement类型方法方法功能static
Class<?>
forName(String
className)按给定的类名创建一个Class类的对象Constructor[]getConstructors()获得一个类中的所有公有构造方法Constructor[]getDeclaredConstructors()获得一个类中的所有构造方法Field[]getFields()获得一个类中的所有公有域Field[]getDeclaredFields()获得一个类的所有域Method[]getMethods()获得一个类中所有的公有方法Method[]getDeclaredMethods()获得一个类的所有方法TgetDeclaredMethods()创建一个Class所表示的类的对象10.2反射1.Class类10.2反射Constructor类在包java.lang.reflect中。Constructor类的定义形式如下:2.Constructor类publicfinalclassConstructor<T>extendsAccessibleObjectimplementsGenericDeclaration,Member类型方法方法功能ClassgetDeclaringClass()得到一个Class类的对象ClassgetDeclaringClass()获得Method对象表示的构造方法所在类的对象Class[]getParameterTypes()获得Constructor对象表示的构造方法中的参数的类型StringgetName()获得Method对象所表示的构造方法的名字TnewInstance()通过调用当前Constructor类对象所表示的类的构造方法创建一个新对象10.2反射2.Constructor类10.2反射Field类在包java.lang.reflect中。Field类的定义形式如下:publicfinalclassFieldextendsAccessibleObject
implementsMember3.Field类类型方法方法功能Objectget(Object
obj)获得obj对象中相应域的值ClassgetDeclaringClass()得到一个Class类的对象StringgetName()获得Field对象所表示的域的名字TgetAnnotation(Class
annotationClass)获得annotation类中当前Field对象所表示的域的注解实例booleanisAnnotationPresent(ClassaannotationClass)判断annotationClass类中当前Field对象所表示的域是否有注解voidset(Object
obj,Object
value)设置由Field对象对应的obj对象中的域的值为value10.2反射3.Field类Method类在包java.lang.reflect包中。Method类的定义形式如下:publicfinalclassMethodextendsAccessibleObjectimplementsGenericDeclaration,Member10.2反射4.Method类类型方法方法功能ClassgetDeclaringClass()得到一个Class类的对象StringgetName()获得Methos对象所表示的方法的名字Class[]getParameterTypes()获得Method对象表示的方法中的参数的类型Objectinvoke(Object
obj,Object...
args)调用Method对象表示的方法,相当于对象obj用参数args调用该方法10.2反射4.Method类【例10.9】利用反射类获取其他类的域和方法,并能实现对象的复制。Example10_09.javaC目录ONTENTS10.2反射10.3注解10.4小结10.1集合10.3注解注解(Annotation)又可称标注,它是程序的元数据,也是程序代码的标记。注解可以在编译、加载类和运行时获得,可以根据注解对数据进行相应的处理。使用反射功能,可以对程序代码进行分析;使用系统定义的注解,可以在编译时对程序进行检查;使用元注解,可以生成相应的文档。注解用在包、类、字段、方法、局部变量、方法参数等的前面,对这些元素进行说明和注释。有系统定义的注解,也可以自定义,还有元注解,就是注解的注解。Java语言本身定义了五个基本的注解,有@Override、@Deprecated、@SupressWarnings、@SafeVarargs和@FunctionalIterface。(1)@Override对方法注解,它注解的方法必须是对父类方法的重写,否则编译时会给出编译错误。(2)@Deprecated可以对域和方法注解,表示注解的域或方法过时了。10.3注解1.系统定义的注解@SupressWarnings(“unchecked”)@SupressWarnings({“unchecked”,”deprecation”})(3)@SupressWarnings对方法注解,如果编译方法时有警告错误,则不显示警告错误。@SupressWarnings使用时需要给出注解元素值,可以给单个值,也可以以数组形式给多个值。如:10.3注解1.系统定义的注解10.3注解1.系统定义的注解(4)@SafeVarargs@SafeVarargs是专门为抑制“堆污染”警告提供的。【例10.10】系统注解的使用。Example10_10.java10.3注解1.系统定义的注解(5)@FunctionalIterface@FunctionalInterface是用来指定某个接口必须是函数式接口,否则就会编译出错。[public|final]@interface注解名{//注解元素的定义数据类型注解元素名()[default缺省值];……}如果只有一个注解元素,注解元素名最好命名为“value”。【例10.11】自定义注解,并利用反射功能提取注解值。Example10_11.java10.3注解2.用户自定义注解注解也可以再被注解,注解的注解称为元注解,用于对注解的说明或控制。系统定义的元注解有5个,分别是@Retention、@Documented、@Target、@Inherited和@Repeatable。(1)@Override它所标记的注解的保存方式。使用时要给出参数,参数有3个可选值,分别是SOURCE(注解只存在在源程序中,编译器忽略注解)、CLASS(在编译时保存注解,运行时忽略)和RUNTIME(运行时保留注解,并可以获得注解)。(2)@Documented它所标注的注解可以被Javadoc提取出来成为程序的文档。10.3注解3.元注解(3)@Target它所标注的注解可以用于标注哪些元素。可以标注的元素作为@Target的参数,参数有8个可选值,分别是ANNOTATION_TYPE(可以对注解标注)、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专项钻孔灌注桩施工合作协议2024版A版
- 2024年04月福建华夏银行厦门分行支行行长等岗位招考笔试历年参考题库附带答案详解
- 2024综合采购战略合作协议示范文本版
- 2025年度医疗设备试用及临床研究合作协议4篇
- 2025年不自愿离婚协议范本:房产分割与子女抚养权争议解决方案3篇
- 2025年度创新创业基地入驻项目合作协议3篇
- 2024试用期劳动合同(含绩效考核标准)3篇
- 2025年度电子产品维修配件销售代理协议(含售后保障服务)4篇
- 2025年高新技术产业园区厂房租赁合同协议2篇
- 2025年度茶叶深加工研发合作合同范本4篇
- HG∕T 2058.1-2016 搪玻璃温度计套
- 九宫数独200题(附答案全)
- 泌尿科一科一品汇报课件
- 人员密集场所消防安全管理培训
- 白铜锡电镀工艺
- 拜耳法氧化铝生产工艺
- 2024年南京信息职业技术学院高职单招(英语/数学/语文)笔试历年参考题库含答案解析
- 部编版二年级下册道德与法治第二单元《我们好好玩》全部教案
- 幼儿园利剑护蕾专项行动工作方案总结与展望
- 合同信息管理方案模板范文
- 2024年大唐云南发电有限公司招聘笔试参考题库含答案解析
评论
0/150
提交评论