




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第9章泛型與枚舉1教學目標(1) 掌握泛型概念(2) 掌握泛型集合和泛型類使用(3) 理解泛型方法及用法(4) 掌握枚舉使用2內容39.1泛型9.1.1泛型引入的原因9.1.2泛型類9.1.3泛型接口9.2.2枚舉的定義9.2.3枚舉與接口9.2.4枚舉與if、switch9.1.4泛型方法9.2枚舉9.2.1枚舉引入的原因內容49.1泛型9.1.1泛型引入的原因9.1.2泛型類9.1.3泛型接口9.2.2枚舉的定義9.2.3枚舉與接口9.2.4枚舉與if、switch9.1.4泛型方法9.2枚舉9.2.1枚舉引入的原因用戶在使用集合處理對象時,經常需要進行強制類型轉換,這很容易帶來類型轉換異常問題。為此,Java設計了泛型機制將代碼的類型檢查提前到了編譯期間進行,為類型安全提供保證。在泛型出現(xiàn)之前,Java使用Object類來實現(xiàn)泛型編程。例如,ArrayList通過維護一個Object引用數(shù)組來實現(xiàn)泛型。59.1.1泛型引入的原因publicclassArrayList{privateObject[]elementData;publicObjectget(inti){…….}publicvoidadd(Objectc){……..}}69.1.1泛型引入的原因當獲取一個值時必須進行強制類型轉換。ArrayListlist=newArrayList();............Stringfilename=(String)list.get(0);另外,這里沒有錯誤檢查,可以向數(shù)組列表中添加任何類型的值。list.add("hello");list.add(newFile("....."));對于上面調用,編譯和運行都不會出錯。不過在其他地方,如果將get的結果強制類型轉換為String類型,就會產生一個錯誤,例如:Stringstr=(String)list.get(0);Stringstr1=(String)list.get(1);當執(zhí)行這句話時Stringstr1=(String)list.get(1),會報如下錯誤:java.lang.ClassCastException:java.io.Filecannotbecasttojava.lang.String79.1.1泛型引入的原因Java泛型機制提供了一個更好的解決方案:類型參數(shù)(TypeParameter)。例如,在ArrayList類里,使用類型參數(shù)用來指定元素的類型,例如:ArrayList<String>files=newArrayList<String>();這樣使得代碼具有更好的可讀性,人們一看便知道該數(shù)組列表中包含的是String對象。編譯器也可以充分利用這個類型參數(shù)信息,在調用get的時候,不需要進行強制類型轉換。編譯器知道返回值類型為String而不是Object,例如:Stringfilename=files.get(0);89-1判斷正誤:泛型將類型進行參數(shù)化,是一種類型安全機制。正確錯誤AB提交單選題1分內容99.1泛型9.1.1泛型引入的原因9.1.2泛型類9.1.3泛型接口9.2.2枚舉的定義9.2.3枚舉與接口9.2.4枚舉與if、switch9.1.4泛型方法9.2枚舉9.2.1枚舉引入的原因109.1.2泛型類泛型類是一種允許在類中使用類型參數(shù)的類。通過泛型類,可以創(chuàng)建具有通用性的類,可以在不同類型之間共享相同的代碼結構,同時保持類型安全性。在定義泛型類時,可以在類名后面使用尖括號(<>)來指定一個或多個類型參數(shù),這些類型參數(shù)可以在類的方法和字段中使用,使得類的行為可以適應不同的數(shù)據(jù)類型。對具有一個類型參數(shù)的泛型類,定義一般形式如下:
修飾符class類名<T>{//類體}//示例:FirstGenericEg.javaT表示一種引用數(shù)據(jù)類型,是泛型的類型參數(shù)類型參數(shù)通常使用大寫字母表示,常用的有:T、E、K、V、U等。通常,E表示元素(Element),多用于Java集合框架,K和V分別表示表的關鍵字(Key)和值(Value),N表示數(shù)字(Number),T表示任意類型(Type)。119-2定義具有一個類型參數(shù)的泛型類,其語法格式正確的是()修飾符class類名<T>{//類體}修飾符class<T>類名{//類體}
修飾符(T)class類名{//類體}修飾符class類名(T)(//類體)
ABCD提交單選題1分內容129.1泛型9.1.1泛型引入的原因9.1.2泛型類9.1.3泛型接口9.2.2枚舉的定義9.2.3枚舉與接口9.2.4枚舉與if、switch9.1.4泛型方法9.2枚舉9.2.1枚舉引入的原因泛型接口與泛型類類似,允許在接口中使用類型參數(shù)。通過泛型接口,可以創(chuàng)建具有通用性的接口,以適應不同類型的實現(xiàn)類。使用泛型接口可以提高代碼的靈活性和可重用性,同時確保類型安全。139.1.3泛型接口
具有一個參數(shù)的泛型接口,其定義一般形式如下:修飾符interface接口名<T>{//接口體}
示例代碼:BrotherPrinter.java上面示例是使用泛型類對泛型接口進行實現(xiàn),那么不使用泛型類是否可以實現(xiàn)泛型接口呢?答案是可以的。只要在實現(xiàn)泛型接口時,用確定的引用類型去替代T就可以。示例:StringPrinter.java149.1.3泛型接口上面代碼中指明了泛型接口中T的具體類型是String,在實現(xiàn)接口中的抽象方法時,也要把類型參數(shù)T替換為String。
159-3定義如下接口,泛型實現(xiàn)正確的是()
interfaceDao<T>{publicvoidadd(Tt);}publicclassMyinterf<T>implementsDao<T>{//類體}publicclassMyinterfimplementsDao{//類體}publicclass<T>MyinterfimplementsDao{//類體}publicclassMyinterf(T)implementsDao<T>{//類體}ABCD提交單選題1分內容169.1泛型9.1.1泛型引入的原因9.1.2泛型類9.1.3泛型接口9.2.2枚舉的定義9.2.3枚舉與接口9.2.4枚舉與if、switch9.1.4泛型方法9.2枚舉9.2.1枚舉引入的原因如果類和接口沒有定義泛型,但是想在方法中使用泛型,例如在方法中接收一個泛型參數(shù),此時可以將該方法定義為泛型方法,泛型方法定義的一般形式如下:
訪問修飾符<T>返回值類型方法名(方法參數(shù)){//方法體}
179.1.4泛型方法示例代碼:GenericMethodDemo.java在使用泛型方法時,需要注意以下方面:用于放置類型參數(shù)的<>應出現(xiàn)在方法的其他所有修飾符之后,并在方法的返回值類型之前,類型參數(shù)通常用單個大寫字母表示;只有引用類型才能作為泛型方法的類型參數(shù);構造方法、實例方法、靜態(tài)方法都可以使用泛型;一個方法可有多個類型參數(shù),多個類型參數(shù)之間用逗號分開。
189.1.4泛型方法199-4
定義泛型方法,下面代碼調用后輸出什么?public
static<E>voidprintArray(E[]inputArray){System.out.print(inputArray[0]+"");}printArray(newString[]{"A","B"});printArray(newDouble[]{2.4,3.5});A2.4B2.5AB2.42.5ABABCD提交單選題1分內容209.1泛型9.1.1泛型引入的原因9.1.2泛型類9.1.3泛型接口9.2.2枚舉的定義9.2.3枚舉與接口9.2.4枚舉與if、switch9.1.4泛型方法9.2枚舉9.2.1枚舉引入的原因在Java中,可以通過staticfinal來定義常量。如果需要定義周一到周日這7個常量,可以用7個不同的int值表示:
219.2.1枚舉引入的原因publicclassWeekday{
publicstaticfinalintSUN=0;
publicstaticfinalintMON=1;
publicstaticfinalintTUE=2;
publicstaticfinalintWED=3;
publicstaticfinalintTHU=4;
publicstaticfinalintFRI=5;
publicstaticfinalintSAT=6;}229.2.1枚舉引入的原因
無論是int常量還是String常量,使用這些常量來表示一組枚舉值時,會有一個潛在的問題,即編譯器無法檢查每個值的合理性。例如,
if(weekday==6||weekday==7){
//dosomething
}
上述代碼編譯和運行均不會報錯,但還存在問題,Weekday定義的常量范圍是0~6,并不包含7,編譯器無法檢查不在枚舉中的int值。239.2.1枚舉引入的原因為了讓編譯器能自動檢查某個值是否在枚舉集合內,可以使用enum關鍵字來定義枚舉類。通過枚舉機制,編譯器可以在編譯期自動檢查出可能的潛在錯誤。枚舉是自定義類型的一個類,用來限制可能的取值,從而降低出錯機率。由于枚舉類型的變量只能被賦予預定義的值,因此使用枚舉可以減少類型錯誤的發(fā)生,提高代碼的安全性。枚舉可以用來定義一組相關的常量,這些常量在編譯時被確定,并且在運行時不能更改,這有助于提高代碼的可讀性和安全性。示例代碼:SimpleEnumDemo.java
249.2.1枚舉引入的原因與采用int定義的常量相比,使用枚舉,編譯器會自動檢查出類型錯誤。例如,下面的代碼在比較整數(shù)值和枚舉類型常量時會出錯。
intday=1;
if(day==Weekday.SUN){
//編譯錯誤 //Compileerror:badoperandtypesforbinaryoperator'==‘
}
內容259.1泛型9.1.1泛型引入的原因9.1.2泛型類9.1.3泛型接口9.2.2枚舉的定義9.2.3枚舉與接口9.2.4枚舉與if、switch9.1.4泛型方法9.2枚舉9.2.1枚舉引入的原因269.2.2枚舉的定義枚舉是一個枚舉值的列表,每個枚舉值都是一個合法標識符,通常標識符全部用大寫字母,枚舉值之間用逗號(,)隔開。枚舉類型定義的簡潔形式如下:enum枚舉名{枚舉值1,枚舉值2,…,枚舉值n}
例如,下面語句定義了枚舉類型Level:
enumLevel{LOW,MEDIUM,HIGH}
Level是枚舉類型名稱,枚舉值LOW、MEDIUM、HIGH類似于常量,在引用枚舉值時,必須使用枚舉類型名稱作為限定詞。下面語句定義了一個枚舉類型變量:
Levelmylevel=Level.LOW;
279.2.2枚舉定義Java語言把枚舉類型作為一個特殊的類對待,因此,枚舉類型變量是一個引用變量。所有枚舉類型都默認擴展一個抽象類java.lang.Enum,該抽象類Enum是Object類的子類,實現(xiàn)了Comparable接口和Serializable接口。枚舉類型繼承Object類的所有方法,實現(xiàn)了接口Comparable的compareTo方法,能夠被序列化。Enum中定義了兩個常用方法:
(1)publicStringname():返回枚舉常量的名字。
(2)publicintordinal():返回和枚舉值關聯(lián)的序號值。示例:LevelEnumsDemo.java
289-5定義枚舉類的關鍵字是()?EnumenumenumsEnumsABCD提交單選題1分299-6枚舉值之間用()隔開逗號,分號;冒號:括號[]ABCD提交單選題1分309-7枚舉類的哪個方法返回一個包含全部枚舉值的枚舉類型數(shù)組?name()compareTo()ordinal()values()ABCD提交單選題1分319-8哪個方法返回枚舉常量的名字?name()compareTo()valueOfvalues()ABCD提交單選題1分內容329.1泛型9.1.1泛型引入的原因9.1.2泛型類9.1.3泛型接口9.2.3枚舉與接口9.2.2枚舉的定義9.2.4枚舉與if、switch9.1.4泛型方法9.2枚舉9.2.1枚舉引入的原因9.2.3枚舉與接口枚舉和Java類一樣,也可以實現(xiàn)一個接口。示例:ColorEnum.java上面代碼定義了一個接口ColorPrinter,通過枚舉類型ColorEnum實現(xiàn)了該接口,并實現(xiàn)了該接口的抽象方法print()。下面代碼示范如何使用枚舉類型ColorEnum,代碼:TestColorEnum.java
33349-9定義如下接口,下面用枚舉實現(xiàn)接口語法正確的是()interfaceColorPrinter{voidprint();}public
enumColorEnumimplementsColorPrin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國機械打漿機市場調查研究報告
- 2025年中國機動車動力系統(tǒng)市場調查研究報告
- 2025至2031年中國脫硫醇活化劑行業(yè)投資前景及策略咨詢研究報告
- 5.客運值班員項目三運輸生產管理車站基礎運作34課件
- 2025屆河北省金太陽-邢襄聯(lián)盟高三上學期開學考(25-05C)-歷史試題(含答案)
- 2025年中國數(shù)顯鐘控全波段收音機數(shù)據(jù)監(jiān)測報告
- 新疆機電職業(yè)技術學院《細胞遺傳生物學技術》2023-2024學年第二學期期末試卷
- 襄陽汽車職業(yè)技術學院《大學生健康適能》2023-2024學年第一學期期末試卷
- 醫(yī)藥工業(yè)數(shù)智化轉型實施方案(2025-2030年)
- 新疆體育職業(yè)技術學院《鐵路旅客運輸組織》2023-2024學年第二學期期末試卷
- 藍色北京師范大學4.3頂部導航欄博士復試模板
- 防汛減災小知識
- 2024年四川宜賓環(huán)球集團有限公司招聘考試真題
- 期中測試(范圍:第1-4章)(A卷·夯實基礎)-北師大版七年級數(shù)學下冊(原卷版)
- 2025時政試題及答案(100題)
- 《旅行社經營與管理》電子教案 5-2 旅行社接待業(yè)務2
- 醫(yī)療器械操作規(guī)范與安全知識培訓試題庫
- 視力檢查方法課件
- 2025固體礦產地質調查規(guī)范1:25000
- 2025-2030中國具身智能行業(yè)研發(fā)創(chuàng)新策略與未來前景展望報告
- 智慧樹知到《藝術與審美(北京大學)》期末考試附答案
評論
0/150
提交評論