![Java程序設(shè)計(jì)教程課件_第1頁(yè)](http://file4.renrendoc.com/view14/M00/0B/0C/wKhkGWeAu_OAZSBEAAJWe0cbhRw113.jpg)
![Java程序設(shè)計(jì)教程課件_第2頁(yè)](http://file4.renrendoc.com/view14/M00/0B/0C/wKhkGWeAu_OAZSBEAAJWe0cbhRw1132.jpg)
![Java程序設(shè)計(jì)教程課件_第3頁(yè)](http://file4.renrendoc.com/view14/M00/0B/0C/wKhkGWeAu_OAZSBEAAJWe0cbhRw1133.jpg)
![Java程序設(shè)計(jì)教程課件_第4頁(yè)](http://file4.renrendoc.com/view14/M00/0B/0C/wKhkGWeAu_OAZSBEAAJWe0cbhRw1134.jpg)
![Java程序設(shè)計(jì)教程課件_第5頁(yè)](http://file4.renrendoc.com/view14/M00/0B/0C/wKhkGWeAu_OAZSBEAAJWe0cbhRw1135.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
人民郵電出版社10集合、反射和注解Java程序設(shè)計(jì)第章C目錄ONTENTS10.2反射10.3注解10.4小結(jié)10.1集合10.1.1集合類框架結(jié)構(gòu)Java提供的集合不是一個(gè)類,而是一系列的接口、抽象類和具體的實(shí)現(xiàn)類。主要有兩個(gè)系列,一個(gè)是Collection系列,一個(gè)是Map系列。Collection系列的用于存儲(chǔ)和處理集合元素是單個(gè)數(shù)據(jù)的情況。而Map系列的用于存儲(chǔ)和處理元素是鍵值對(duì)的集合。Collection系列的又分為兩類,一類是可重復(fù)、注重順序的List子系,一類是不可重復(fù)相對(duì)不注重順序的set子系。10.1.1集合類框架結(jié)構(gòu)10.1.1集合類框架結(jié)構(gòu)實(shí)線邊框的是實(shí)現(xiàn)類,如ArrayList,LinkedList,HashMap等短劃線邊框的是抽象類,如AbstractCollection,AbstractList,AbstractMap等點(diǎn)線邊框的是接口,如Collection,List,Map等。Java中的集合類主要從Collection和Map兩個(gè)接口派生。10.1.2List接口List接口的定義形式:publicinterfaceList<E>extendsCollection<E>List是有序集合,可以準(zhǔn)確地控制元素在集合中的插入位置,可以通過(guò)索引獲得集合中的元素,可以通過(guò)元素獲得元素在集合中的位置。它的主要方法如表10.1所示。10.1.2List接口表10.1List接口中的主要方法類型方法名方法功能booleanadd(Ee)把元素e加到表的尾部voidadd(int
index,E
e)把元素e加到表的index位置,原index位置元素順序后移booleanequals(Object
o)比較對(duì)象o是否與表中的元素是同一元素Eget(int
index)得到表中index位置的元素booleanindexOf(Objecto)判斷元素o在表中是否存在。如果不存在,則返回-1Iterator<E>iterator()獲得表的遍歷器Eremove(int
index)將表中第index位置的元素刪除booleanremove(Object
o)刪除表中與o相同的元素intsize()得到表中元素的個(gè)數(shù)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的一種擴(kuò)展,與List不同的是,在Set中的對(duì)象元素不能重復(fù),也就是說(shuō)不能把同樣的東西兩次放入同一個(gè)Set容器中。它的常用具體實(shí)現(xiàn)有HashSet和TreeSet類。10.1.5Set接口10.1.6HashSet類HashSet類的定義形式:publicclassHashSet<E>extendsAbstractSet<E>implementsSet<E>,Cloneable,Serializable【例10.3】HashSet的使用。Example10_03.javaHashSet類按照哈希算法來(lái)存取對(duì)象。當(dāng)向集合中加入一個(gè)新對(duì)象時(shí),會(huì)調(diào)用對(duì)象的hashCode()方法得到對(duì)象的哈希碼,然后根據(jù)這個(gè)碼計(jì)算出對(duì)象在集合中存儲(chǔ)的位置。HashSet對(duì)象中不能存儲(chǔ)相同的數(shù)據(jù),存儲(chǔ)數(shù)據(jù)是無(wú)序的。10.1.7Map接口Map是一種把鍵對(duì)象和值對(duì)象進(jìn)行關(guān)聯(lián)的容器,而一個(gè)值對(duì)象又可以是一個(gè)Map,依次類推,這樣就可形成一個(gè)多級(jí)映射。對(duì)于鍵對(duì)象來(lái)說(shuō),像Set一樣,一個(gè)Map容器中的鍵對(duì)象不允許重復(fù),這是為了保持查找結(jié)果的一致性。當(dāng)然在使用過(guò)程中,某個(gè)鍵所對(duì)應(yīng)的值對(duì)象可能會(huì)發(fā)生變化,這時(shí)會(huì)按照最后一次修改的值對(duì)象與鍵對(duì)應(yīng)。對(duì)于值對(duì)象則沒(méi)有唯一性的要求??梢詫⑷我舛鄠€(gè)鍵都映射到一個(gè)值對(duì)象上,這不會(huì)發(fā)生任何問(wèn)題。Map接口的定義形式:publicinterfaceMap<K,V>10.1.7Map接口10.1.8HashMap類Map有兩種比較常用的實(shí)現(xiàn):HashMap和TreeMap。HashMap用的是哈希碼的算法,以便快速查找一個(gè)鍵,TreeMap則是對(duì)鍵按序存放,因此它還有一些擴(kuò)展的方法,比如firstKey(),lastKey()等,還可以從TreeMap中指定一個(gè)范圍以取得其子Map。HashMap是日常開發(fā)中,用的最多的集合類之一。HashMap類的定義形式:publicclassHashMap<K,V>extendsAbstractMap<K,V>implementsMap<K,V>,Cloneable,Serializable【例10.4】HashMap類的使用。Example10_04.java10.1.9集合的遍歷雖然對(duì)于不同類型的具體集合類可能會(huì)有特定的遍歷方式,但也提供了共性的方法,主要有普通for、增強(qiáng)型的for和iterator方式來(lái)遍歷集合。【例10.6】關(guān)于Map類型集合的遍歷。Example10_06.java【例10.5】List與Set類型集合的遍歷。Example10_05.java10.1.10聚合操作1.聚合操作簡(jiǎn)介Stream是一個(gè)接口,可以將集合或數(shù)組中的元素轉(zhuǎn)換為Stream流的形式。在對(duì)流進(jìn)行處理時(shí),不同的流操作以級(jí)聯(lián)的方式形成處理流水線。一個(gè)流水線由一個(gè)源,以及0到多個(gè)中間操作和一個(gè)終結(jié)操作構(gòu)成。這個(gè)流水線也被稱為管道流。聚合操作是通過(guò)Stream流處理實(shí)現(xiàn)的。但要注意它和java.io包下的InputStream和OutputStream沒(méi)有什么關(guān)系。源:源是流中元素的來(lái)源。Java提供了很多內(nèi)置的源,包括數(shù)組、集合、生成函數(shù)、無(wú)限序列生成器和I/O通道等。中間操作:中間操作是在一個(gè)流上進(jìn)行操作,返回結(jié)果也是一個(gè)流。這些操作是延遲執(zhí)行的。終結(jié)操作:終結(jié)操作通過(guò)遍歷流來(lái)產(chǎn)生一個(gè)結(jié)果或是某些作用。在一個(gè)流上執(zhí)行終結(jié)操作之后,該流被消費(fèi),無(wú)法再次被使用。10.1.10聚合操作2.流對(duì)象的創(chuàng)建(1)所有的Collections集合都可以使用stream()靜態(tài)方法獲取Stream流對(duì)象;需要說(shuō)明的是,雖然Map接口中并沒(méi)有stream()方法,但是Map的values()和keySet()均返回集合對(duì)象,在集合對(duì)象上當(dāng)然是可以使用stream()方法的。(2)Arrays數(shù)組工具類的stream()靜態(tài)方法也可以獲取數(shù)組元素的Stream流對(duì)象。(3)Stream接口的of()靜態(tài)方法可以獲取基本類型包裝類數(shù)組、引用類型數(shù)組和單個(gè)元素的Stream流對(duì)象;實(shí)際上of()方法內(nèi)部其實(shí)調(diào)用了Arrays.stream()方法實(shí)現(xiàn)的。(4)Stream.iterate創(chuàng)建流的方式(5)Stream.generate創(chuàng)建流的方式(6)使用流行的APIs,如Ppile().splitAsStream()10.1.10聚合操作上面前三種在創(chuàng)建流之前,對(duì)象的大?。ㄩL(zhǎng)度)已經(jīng)確認(rèn),所以這種流也被成為有限流。而通過(guò)Stream.iterate和Stream.generate創(chuàng)建流的方式,是無(wú)限大小的流(generate最大是Long.MAX_VALUE),也被稱為無(wú)限流。2.流對(duì)象的創(chuàng)建【例10.7】流對(duì)象的幾種創(chuàng)建方式。Example10_07.java10.1.10聚合操作每個(gè)中間操作,又會(huì)返回一個(gè)Stream,比如.filter()又返回一個(gè)Stream,中間操作是“懶”操作,并不會(huì)真正進(jìn)行遍歷。流中間操作在應(yīng)用到流上,返回一個(gè)新的流。常用的流中間操作如表10.8所示。3.中間操作10.1.10聚合操作3.中間操作10.1.10聚合操作終結(jié)操作可以遍歷流進(jìn)而生成結(jié)果或直接消費(fèi),而后該流不能再被使用。幾乎在所有情況下,終結(jié)操作都是立即執(zhí)行的,在返回之前完成對(duì)數(shù)據(jù)源的遍歷和對(duì)管道的處理。終結(jié)操作才真正進(jìn)行遍歷行為,前面的中間操作也在這個(gè)時(shí)候,才真正的執(zhí)行。4.終結(jié)操作10.1.10聚合操作
4.終結(jié)操作10.1.10聚合操作5.聚合操作案例【例10.8】流對(duì)象的幾種創(chuàng)建方式。Example10_08.javaC目錄ONTENTS10.2反射10.3注解10.4小結(jié)10.1集合10.2反射在程序運(yùn)行過(guò)程中,對(duì)于任意一個(gè)對(duì)象,都能夠知道這個(gè)對(duì)象所在類的所有屬性和方法,都能夠調(diào)用它的任意一個(gè)方法和訪問(wèn)它的任意一個(gè)屬性,這種動(dòng)態(tài)調(diào)用對(duì)象的方法及動(dòng)態(tài)獲取的信息的功能稱為Java語(yǔ)言的反射機(jī)制。與反射有關(guān)的類包括Class類、Constructor類、Field類和Method類,它們可以統(tǒng)稱反射類。反射可以實(shí)現(xiàn)程序的動(dòng)態(tài)效果。通過(guò)反射,可以在程序運(yùn)行過(guò)程中知道程序中使用了哪些類及類中的屬性和方法。注解用于在程序編譯、運(yùn)行時(shí)解析和使用,起到說(shuō)明配置作用。10.2反射Class類在包java.lang中。Class類的定義形式:1.Class類publicfinalclassClass<T>extendsObjectimplementsSerializable,GenericDeclaration,Type,AnnotatedElement類型方法方法功能static
Class<?>
forName(String
className)按給定的類名創(chuàng)建一個(gè)Class類的對(duì)象Constructor[]getConstructors()獲得一個(gè)類中的所有公有構(gòu)造方法Constructor[]getDeclaredConstructors()獲得一個(gè)類中的所有構(gòu)造方法Field[]getFields()獲得一個(gè)類中的所有公有域Field[]getDeclaredFields()獲得一個(gè)類的所有域Method[]getMethods()獲得一個(gè)類中所有的公有方法Method[]getDeclaredMethods()獲得一個(gè)類的所有方法TgetDeclaredMethods()創(chuàng)建一個(gè)Class所表示的類的對(duì)象10.2反射1.Class類10.2反射Constructor類在包java.lang.reflect中。Constructor類的定義形式如下:2.Constructor類publicfinalclassConstructor<T>extendsAccessibleObjectimplementsGenericDeclaration,Member類型方法方法功能ClassgetDeclaringClass()得到一個(gè)Class類的對(duì)象ClassgetDeclaringClass()獲得Method對(duì)象表示的構(gòu)造方法所在類的對(duì)象Class[]getParameterTypes()獲得Constructor對(duì)象表示的構(gòu)造方法中的參數(shù)的類型StringgetName()獲得Method對(duì)象所表示的構(gòu)造方法的名字TnewInstance()通過(guò)調(diào)用當(dāng)前Constructor類對(duì)象所表示的類的構(gòu)造方法創(chuàng)建一個(gè)新對(duì)象10.2反射2.Constructor類10.2反射Field類在包java.lang.reflect中。Field類的定義形式如下:publicfinalclassFieldextendsAccessibleObject
implementsMember3.Field類類型方法方法功能Objectget(Object
obj)獲得obj對(duì)象中相應(yīng)域的值ClassgetDeclaringClass()得到一個(gè)Class類的對(duì)象StringgetName()獲得Field對(duì)象所表示的域的名字TgetAnnotation(Class
annotationClass)獲得annotation類中當(dāng)前Field對(duì)象所表示的域的注解實(shí)例booleanisAnnotationPresent(ClassaannotationClass)判斷annotationClass類中當(dāng)前Field對(duì)象所表示的域是否有注解voidset(Object
obj,Object
value)設(shè)置由Field對(duì)象對(duì)應(yīng)的obj對(duì)象中的域的值為value10.2反射3.Field類Method類在包java.lang.reflect包中。Method類的定義形式如下:publicfinalclassMethodextendsAccessibleObjectimplementsGenericDeclaration,Member10.2反射4.Method類類型方法方法功能ClassgetDeclaringClass()得到一個(gè)Class類的對(duì)象StringgetName()獲得Methos對(duì)象所表示的方法的名字Class[]getParameterTypes()獲得Method對(duì)象表示的方法中的參數(shù)的類型Objectinvoke(Object
obj,Object...
args)調(diào)用Method對(duì)象表示的方法,相當(dāng)于對(duì)象obj用參數(shù)args調(diào)用該方法10.2反射4.Method類【例10.9】利用反射類獲取其他類的域和方法,并能實(shí)現(xiàn)對(duì)象的復(fù)制。Example10_09.javaC目錄ONTENTS10.2反射10.3注解10.4小結(jié)10.1集合10.3注解注解(Annotation)又可稱標(biāo)注,它是程序的元數(shù)據(jù),也是程序代碼的標(biāo)記。注解可以在編譯、加載類和運(yùn)行時(shí)獲得,可以根據(jù)注解對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的處理。使用反射功能,可以對(duì)程序代碼進(jìn)行分析;使用系統(tǒng)定義的注解,可以在編譯時(shí)對(duì)程序進(jìn)行檢查;使用元注解,可以生成相應(yīng)的文檔。注解用在包、類、字段、方法、局部變量、方法參數(shù)等的前面,對(duì)這些元素進(jìn)行說(shuō)明和注釋。有系統(tǒng)定義的注解,也可以自定義,還有元注解,就是注解的注解。Java語(yǔ)言本身定義了五個(gè)基本的注解,有@Override、@Deprecated、@SupressWarnings、@SafeVarargs和@FunctionalIterface。(1)@Override對(duì)方法注解,它注解的方法必須是對(duì)父類方法的重寫,否則編譯時(shí)會(huì)給出編譯錯(cuò)誤。(2)@Deprecated可以對(duì)域和方法注解,表示注解的域或方法過(guò)時(shí)了。10.3注解1.系統(tǒng)定義的注解@SupressWarnings(“unchecked”)@SupressWarnings({“unchecked”,”deprecation”})(3)@SupressWarnings對(duì)方法注解,如果編譯方法時(shí)有警告錯(cuò)誤,則不顯示警告錯(cuò)誤。@SupressWarnings使用時(shí)需要給出注解元素值,可以給單個(gè)值,也可以以數(shù)組形式給多個(gè)值。如:10.3注解1.系統(tǒng)定義的注解10.3注解1.系統(tǒng)定義的注解(4)@SafeVarargs@SafeVarargs是專門為抑制“堆污染”警告提供的?!纠?0.10】系統(tǒng)注解的使用。Example10_10.java10.3注解1.系統(tǒng)定義的注解(5)@FunctionalIterface@FunctionalInterface是用來(lái)指定某個(gè)接口必須是函數(shù)式接口,否則就會(huì)編譯出錯(cuò)。[public|final]@interface注解名{//注解元素的定義數(shù)據(jù)類型注解元素名()[default缺省值];……}如果只有一個(gè)注解元素,注解元素名最好命名為“value”?!纠?0.11】自定義注解,并利用反射功能提取注解值。Example10_11.java10.3注解2.用戶自定義注解注解也可以再被注解,注解的注解稱為元注解,用于對(duì)注解的說(shuō)明或控制。系統(tǒng)定義的元注解有5個(gè),分別是@Retention、@Documented、@Target、@Inherited和@Repeatable。(1)@Override它所標(biāo)記的注解的保存方式。使用時(shí)要給出參數(shù),參數(shù)有3個(gè)可選值,分別是SOURCE(注解只存在在源程序中,編譯器忽略注解)、CLASS(在編譯時(shí)保存注解,運(yùn)行時(shí)忽略)和RUNTIME(運(yùn)行時(shí)保留注解,并可以獲得注解)。(2)@Documented它所標(biāo)注的注解可以被Javadoc提取出來(lái)成為程序的文檔。10.3注解3.元注解(3)@Target它所標(biāo)注的注解可以用于標(biāo)注哪些元素。可以標(biāo)注的元素作為@Target的參數(shù),參數(shù)有8個(gè)可選值,分別是ANNOTATION_TYPE(可以對(duì)注解標(biāo)注)、
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年個(gè)人居間協(xié)議范文(2篇)
- 2025年個(gè)人貨運(yùn)汽車租賃合同模板(2篇)
- 2025年產(chǎn)品經(jīng)銷協(xié)議標(biāo)準(zhǔn)范文(2篇)
- 2025年五年級(jí)班主任期末個(gè)人工作總結(jié)模版(2篇)
- 2025年產(chǎn)品供貨合同格式范文(2篇)
- 智慧小鎮(zhèn)用地中介合同范本
- 辦公大樓石材運(yùn)送合同模板
- 2025年度安防設(shè)備展覽會(huì)現(xiàn)場(chǎng)展位安保合同
- 婚慶服務(wù)居間合同
- 教育設(shè)施改造貸款居間合同
- RB/T 101-2013能源管理體系電子信息企業(yè)認(rèn)證要求
- GB/T 4513.7-2017不定形耐火材料第7部分:預(yù)制件的測(cè)定
- GB/T 10205-2009磷酸一銨、磷酸二銨
- 公司財(cái)務(wù)制度及流程
- 高支模專項(xiàng)施工方案(專家論證)
- 深圳版初中英語(yǔ)單詞匯總
- 健康養(yǎng)生,快樂(lè)生活課件
- 《物流與供應(yīng)鏈管理-新商業(yè)、新鏈接、新物流》配套教學(xué)課件
- MDD指令附錄一 基本要求檢查表2013版
- 駱駝祥子1一24章批注
- 新部編人教版四年級(jí)下冊(cè)道德與法治全冊(cè)教案(教學(xué)設(shè)計(jì))
評(píng)論
0/150
提交評(píng)論