第10章 集合、泛型、反射和標(biāo)注_第1頁(yè)
第10章 集合、泛型、反射和標(biāo)注_第2頁(yè)
第10章 集合、泛型、反射和標(biāo)注_第3頁(yè)
第10章 集合、泛型、反射和標(biāo)注_第4頁(yè)
第10章 集合、泛型、反射和標(biāo)注_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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反射和標(biāo)注10.4小結(jié)10.1泛型10.1.1泛型在集合中的主要應(yīng)用泛型是通用類型的類,泛型類對(duì)象可以表示多種不同的類的對(duì)象。集合是多個(gè)離散的對(duì)象組成的單一的單元。在集合中的對(duì)象可以用泛型類的對(duì)象表示。10.1.2聲明泛型類泛型類是帶有類型參數(shù)的類,類中有域和行為。泛型類的定義形式:class泛型類名<類型參數(shù)表列>{//類體}10.1.2聲明泛型類定義泛型類的對(duì)象:泛型類名[<實(shí)際類型表列>]對(duì)象名=new泛型類名[<實(shí)際類型表列>]([形參表]);或泛型類名[<實(shí)際類型表列>]對(duì)象名=new泛型類名[<>]([形參表]);也可以用“?”代替“實(shí)際參數(shù)表列”10.1.2聲明泛型類【例10.1】設(shè)計(jì)一個(gè)數(shù)組類,該類的對(duì)象能表示任何類型的對(duì)象數(shù)組。Example10_1.java【例10.2】定義一個(gè)泛型數(shù)組類,并創(chuàng)建數(shù)組類的對(duì)象。Example10_2.java如果使用泛型,則可以保證每一個(gè)數(shù)組類對(duì)象中的元素都是同一類型。10.1.3聲明泛型接口除了可以定義泛型類外,還可以定義泛型接口。泛型接口定義形式:interface接口名<類型參數(shù)表列>{//……}10.1.3聲明泛型接口在實(shí)現(xiàn)接口時(shí),也應(yīng)該聲明與接口相同的類型參數(shù)。實(shí)現(xiàn)形式如下:class類名<類型參數(shù)表列>implements接口名<類型參數(shù)表列>{//…}【例10.3】定義泛型接口并實(shí)現(xiàn)泛型接口。Example10_03.java10.1.4聲明泛型方法1.泛型方法[訪問(wèn)限定詞][static]<類型參數(shù)表列>方法類型方法名([參數(shù)表列]){//…}方法也可以是泛型方法,泛型方法可以定義在泛型類中,也可以定義在非泛型類中。泛型方法定義形式:【例10.4】泛型方法的定義與使用。Example10_04.java10.1.4聲明泛型方法利用泛型方法,可以定義具有可變參數(shù)的方法,如printf方法:2.具有可變參數(shù)的方法System.out.printf(“%d,%f\n”,i,f);System.out.printf(“x=%d,y=%d,z=%d”,x,y,z);printf是具有可變參數(shù)的方法。10.1.4聲明泛型方法具有可變參數(shù)的方法的定義形式:[訪問(wèn)限定詞]<類型參數(shù)表列>方法類型方法名(類型參數(shù)名…

參數(shù)名){//……}【例10.5】具有可變參數(shù)的方法的定義與使用。Example10_05.java2.具有可變參數(shù)的方法10.1.5泛型參數(shù)的限定有時(shí)候只想接收指定范圍內(nèi)的類類型,過(guò)多的類型就可能會(huì)產(chǎn)生錯(cuò)誤,這時(shí)可以對(duì)泛型的參數(shù)時(shí)進(jìn)行限定。參數(shù)限定的語(yǔ)法形式:類型形式參數(shù)extends父類“類型形式參數(shù)”是指聲明泛型類時(shí)所聲明的類型,“父類”表示只有這個(gè)類下面的子類才可以做實(shí)際類型?!纠?0.6】定義一個(gè)泛型類,能夠找出多個(gè)數(shù)據(jù)中的最大數(shù)和最小數(shù)。Example10_06.javaC目錄ONTENTS10.2集合10.3反射和標(biāo)注10.4小結(jié)10.1泛型10.2.1List接口為了保存數(shù)量不確定、類型不一致和有映射關(guān)系的數(shù)據(jù),Java語(yǔ)言提供了集合類。一個(gè)集合類的對(duì)象可以保存和處理其它類的對(duì)象,因此集合對(duì)象可以稱為容器,集合類稱為容器類。利用集合對(duì)象,程序員在開(kāi)發(fā)程序時(shí),可以將精力集中在程序的核心部分,而不用再寫基本算法和數(shù)據(jù)結(jié)構(gòu)的程序,從而提高程序的開(kāi)發(fā)效率和程序的可靠性。Java中的集合類主要從Collection和Map兩個(gè)接口派生。List接口的定義形式:publicinterfaceList<E>extendsCollection<E>10.2.1List接口表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ù)10.2.2Stack類表10.1List接口中的主要方法類型方法方法功能booleanempty()判斷棧是否為空Epeek()得到棧頂元素但不從棧中刪除Epop()得到棧頂元素而且將其從棧中刪除Epush(Ee)將元素e入棧(放在棧頂)intsearch(Objecto)得到元素o在棧中的位置Stack類的定義形式:publicclassStack<E>extendsVector<E>【例10-7】Stack類的使用。Example10_07.javaArrayList類的定義形式:publicclassArrayList<E>extendsAbstractList<E>implementsList<E>,RandomAccess,Cloneable,Serializable10.2.3ArrayList類【例10.8】ArrayList類的使用。Example10_08.javaVector類的定義形式:publicclassVector<E>extendsAbstractList<E>implementsList<E>,RandomAccess,Cloneable,Serializable10.2.4Vector類Vector也相當(dāng)于一個(gè)可變長(zhǎng)度的數(shù)組,也實(shí)現(xiàn)了List接口。Vector與ArrayList的區(qū)別在于,Vector的對(duì)象是同步的,而ArrayList的對(duì)象是非同步的。10.2.4Vector類【例10.9】Vector類的使用。Example10_09.java方法方法功能Vector()創(chuàng)建一個(gè)可以容納10個(gè)元素的Vector對(duì)象Vector(int

initialCapacity)創(chuàng)建一個(gè)有initialCapacity容量的Vector對(duì)象Vector(int

initialCapacity,int

capacityIncrement)創(chuàng)建一個(gè)有initialCapacity容量的Vector對(duì)象。如果空間不足,則每次增加量是capacityIncrement10.2.5Queue接口類型方法方法功能booleanadd(Ee)將元素e插入到隊(duì)列的尾部Eelement()獲得隊(duì)列頭部元素但不從隊(duì)列中刪除該元素booleanoffer(Ee)將元素e插入到隊(duì)列的尾部Epeek()獲得隊(duì)列頭部元素但不從隊(duì)列中刪除該元素,如果隊(duì)列為空則返回nullEpoll()獲得隊(duì)列頭部元素并且從隊(duì)列中刪除該元素,如果隊(duì)列為空則返回nullEremove()獲得并刪除隊(duì)列的頭部元素Queue接口的定義形式:publicinterfaceQueue<E>extendsCollection<E>Queue接口用于表示隊(duì)列,實(shí)現(xiàn)“先進(jìn)先出”操作。它的主要方法如表所示。10.2.6LinkedList類【例10.10】LinkedList類的使用。Example10_10.javaLinkedList類的定義形式:publicclassLinkedList<E>extendsAbstractSequentialList<E>implementsList<E>,Deque<E>,Cloneable,SerializableLinkedList實(shí)現(xiàn)了List和Queue接口,LinkedList對(duì)象可以表示順序表,可以把它當(dāng)做棧使用,還可以把它當(dāng)做隊(duì)列使用。LinkedList主要方法如表10.5所示。10.2.7HashSet類類型方法方法功能booleanadd(Ee)如果當(dāng)前表中不存在元素e,則將e加入到表中voidclear()從表中刪除所有元素booleancontains(Objecto)判斷表中是否有元素oIterator<E>iterator()得到當(dāng)前表的遍歷器booleanremove(Objecto)如果表中存在元素o,則將其從表中刪除intsize()得到表中元素的個(gè)數(shù)HashSet類的定義形式:publicclassHashSet<E>extendsAbstractSet<E>implementsSet<E>,Cloneable,Serializable10.2.7HashSet類【例10.11】HashSet的使用。Example10_11.javaC目錄ONTENTS10.2集合10.3反射和標(biāo)注10.4小結(jié)10.1泛型10.3.1反射在程序運(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.3.1反射Class類在包java.lang中。Class類的定義形式:1.Class類publicfinalclassClass<T>extendsObjectimplementsSerializable,GenericDeclaration,Type,AnnotatedElement10.3.1反射1.Class類類型方法方法功能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.3.1反射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.3.1反射2.Constructor類10.3.1反射Field類在包java.lang.reflect中。Field類的定義形式如下:publicfinalclassFieldextendsAccessibleObjectimplementsMember3.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.3.1反射3.Field類Method類在包java.lang.reflect包中。Method類的定義形式如下:publicfinalclassMethodextendsAccessibleObjectimplementsGenericDeclaration,Member10.3.1反射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.3.1反射4.Method類10.3.2注解注解(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)定義的注解。10.3.2注解與類、接口類似,注解也可以自定義。注解定義的語(yǔ)法形式:1.注解的定義[public|final]@interface注解名{//注解元素的定義}注解元素的語(yǔ)法形式:數(shù)據(jù)類型注解元素名()[default缺省值];如果只有一個(gè)注解,注解名最好命名為“value”?!纠?0.13】定義注解,并利用反射功能提取注解值。Example10_13.java10.3.2注解1.注解的定義Java語(yǔ)言本身定義了三個(gè)基本的注解,分別是@Override、@Deprecated和@SupressWarnings。(1)@Override對(duì)方法注解,它注解的方法必須是對(duì)父類方法的重寫,否則編譯時(shí)會(huì)給出編譯錯(cuò)誤。(2)@Deprecated可以對(duì)域和方法注解,表示注解的域或方法過(guò)時(shí)了。10.3.2注解2.系統(tǒng)定義的注解10.3.2注解2.系統(tǒng)定義的注解@SupressWarnings(“unchecked”)@SupressWarnings({“unchecked”,”deprecation”})(3)@SupressWarnings對(duì)方法注解,如果編譯方法時(shí)有警告錯(cuò)誤,則不顯示警告錯(cuò)誤。@SupressWarnings使用時(shí)需要給出注解元素值,可以給單個(gè)值,也可以以數(shù)組形式給多個(gè)值。如:【例10.14】系統(tǒng)注解的使用。Example10_14.java注解也可以再被注解,注解的注解稱為元注解,用于對(duì)注解的說(shuō)明或控制。系統(tǒng)定義的元注解有4個(gè),分別是@Retention、@Documented、@Target和@Inherited。(1)@Override它所標(biāo)記的注解的保存方式。使用時(shí)要給出參數(shù),參數(shù)有3個(gè)可選值,分別是SOURCE(注解只存在在源程序中,編譯器忽略注解)、CLASS(在編譯時(shí)保存注解,運(yùn)行時(shí)忽略)和RUNTIME(運(yùn)行時(shí)保留注解,并可以獲得注解)。(2)@Documented它所標(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論