




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第9章泛型與枚舉1教學(xué)目標(biāo)(1) 掌握泛型概念(2) 掌握泛型集合和泛型類使用(3) 理解泛型方法及用法(4) 掌握枚舉使用2內(nèi)容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枚舉引入的原因內(nèi)容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枚舉引入的原因用戶在使用集合處理對(duì)象時(shí),經(jīng)常需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換,這很容易帶來(lái)類型轉(zhuǎn)換異常問(wèn)題。為此,Java設(shè)計(jì)了泛型機(jī)制將代碼的類型檢查提前到了編譯期間進(jìn)行,為類型安全提供保證。在泛型出現(xiàn)之前,Java使用Object類來(lái)實(shí)現(xiàn)泛型編程。例如,ArrayList通過(guò)維護(hù)一個(gè)Object引用數(shù)組來(lái)實(shí)現(xiàn)泛型。59.1.1泛型引入的原因publicclassArrayList{privateObject[]elementData;publicObjectget(inti){…….}publicvoidadd(Objectc){……..}}69.1.1泛型引入的原因當(dāng)獲取一個(gè)值時(shí)必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換。ArrayListlist=newArrayList();............Stringfilename=(String)list.get(0);另外,這里沒(méi)有錯(cuò)誤檢查,可以向數(shù)組列表中添加任何類型的值。list.add("hello");list.add(newFile("....."));對(duì)于上面調(diào)用,編譯和運(yùn)行都不會(huì)出錯(cuò)。不過(guò)在其他地方,如果將get的結(jié)果強(qiáng)制類型轉(zhuǎn)換為String類型,就會(huì)產(chǎn)生一個(gè)錯(cuò)誤,例如:Stringstr=(String)list.get(0);Stringstr1=(String)list.get(1);當(dāng)執(zhí)行這句話時(shí)Stringstr1=(String)list.get(1),會(huì)報(bào)如下錯(cuò)誤:java.lang.ClassCastException:java.io.Filecannotbecasttojava.lang.String79.1.1泛型引入的原因Java泛型機(jī)制提供了一個(gè)更好的解決方案:類型參數(shù)(TypeParameter)。例如,在ArrayList類里,使用類型參數(shù)用來(lái)指定元素的類型,例如:ArrayList<String>files=newArrayList<String>();這樣使得代碼具有更好的可讀性,人們一看便知道該數(shù)組列表中包含的是String對(duì)象。編譯器也可以充分利用這個(gè)類型參數(shù)信息,在調(diào)用get的時(shí)候,不需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換。編譯器知道返回值類型為String而不是Object,例如:Stringfilename=files.get(0);89-1判斷正誤:泛型將類型進(jìn)行參數(shù)化,是一種類型安全機(jī)制。正確錯(cuò)誤AB提交單選題1分內(nèi)容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ù)的類。通過(guò)泛型類,可以創(chuàng)建具有通用性的類,可以在不同類型之間共享相同的代碼結(jié)構(gòu),同時(shí)保持類型安全性。在定義泛型類時(shí),可以在類名后面使用尖括號(hào)(<>)來(lái)指定一個(gè)或多個(gè)類型參數(shù),這些類型參數(shù)可以在類的方法和字段中使用,使得類的行為可以適應(yīng)不同的數(shù)據(jù)類型。對(duì)具有一個(gè)類型參數(shù)的泛型類,定義一般形式如下:
修飾符class類名<T>{//類體}//示例:FirstGenericEg.javaT表示一種引用數(shù)據(jù)類型,是泛型的類型參數(shù)類型參數(shù)通常使用大寫字母表示,常用的有:T、E、K、V、U等。通常,E表示元素(Element),多用于Java集合框架,K和V分別表示表的關(guān)鍵字(Key)和值(Value),N表示數(shù)字(Number),T表示任意類型(Type)。119-2定義具有一個(gè)類型參數(shù)的泛型類,其語(yǔ)法格式正確的是()修飾符class類名<T>{//類體}修飾符class<T>類名{//類體}
修飾符(T)class類名{//類體}修飾符class類名(T)(//類體)
ABCD提交單選題1分內(nèi)容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ù)。通過(guò)泛型接口,可以創(chuàng)建具有通用性的接口,以適應(yīng)不同類型的實(shí)現(xiàn)類。使用泛型接口可以提高代碼的靈活性和可重用性,同時(shí)確保類型安全。139.1.3泛型接口
具有一個(gè)參數(shù)的泛型接口,其定義一般形式如下:修飾符interface接口名<T>{//接口體}
示例代碼:BrotherPrinter.java上面示例是使用泛型類對(duì)泛型接口進(jìn)行實(shí)現(xiàn),那么不使用泛型類是否可以實(shí)現(xiàn)泛型接口呢?答案是可以的。只要在實(shí)現(xiàn)泛型接口時(shí),用確定的引用類型去替代T就可以。示例:StringPrinter.java149.1.3泛型接口上面代碼中指明了泛型接口中T的具體類型是String,在實(shí)現(xiàn)接口中的抽象方法時(shí),也要把類型參數(shù)T替換為String。
159-3定義如下接口,泛型實(shí)現(xiàn)正確的是()
interfaceDao<T>{publicvoidadd(Tt);}publicclassMyinterf<T>implementsDao<T>{//類體}publicclassMyinterfimplementsDao{//類體}publicclass<T>MyinterfimplementsDao{//類體}publicclassMyinterf(T)implementsDao<T>{//類體}ABCD提交單選題1分內(nèi)容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枚舉引入的原因如果類和接口沒(méi)有定義泛型,但是想在方法中使用泛型,例如在方法中接收一個(gè)泛型參數(shù),此時(shí)可以將該方法定義為泛型方法,泛型方法定義的一般形式如下:
訪問(wèn)修飾符<T>返回值類型方法名(方法參數(shù)){//方法體}
179.1.4泛型方法示例代碼:GenericMethodDemo.java在使用泛型方法時(shí),需要注意以下方面:用于放置類型參數(shù)的<>應(yīng)出現(xiàn)在方法的其他所有修飾符之后,并在方法的返回值類型之前,類型參數(shù)通常用單個(gè)大寫字母表示;只有引用類型才能作為泛型方法的類型參數(shù);構(gòu)造方法、實(shí)例方法、靜態(tài)方法都可以使用泛型;一個(gè)方法可有多個(gè)類型參數(shù),多個(gè)類型參數(shù)之間用逗號(hào)分開(kāi)。
189.1.4泛型方法199-4
定義泛型方法,下面代碼調(diào)用后輸出什么?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分內(nèi)容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中,可以通過(guò)staticfinal來(lái)定義常量。如果需要定義周一到周日這7個(gè)常量,可以用7個(gè)不同的int值表示:
219.2.1枚舉引入的原因publicclassWeekday{
publicstaticfinalintSUN=0;
publicstaticfinalintMON=1;
publicstaticfinalintTUE=2;
publicstaticfinalintWED=3;
publicstaticfinalintTHU=4;
publicstaticfinalintFRI=5;
publicstaticfinalintSAT=6;}229.2.1枚舉引入的原因
無(wú)論是int常量還是String常量,使用這些常量來(lái)表示一組枚舉值時(shí),會(huì)有一個(gè)潛在的問(wèn)題,即編譯器無(wú)法檢查每個(gè)值的合理性。例如,
if(weekday==6||weekday==7){
//dosomething
}
上述代碼編譯和運(yùn)行均不會(huì)報(bào)錯(cuò),但還存在問(wèn)題,Weekday定義的常量范圍是0~6,并不包含7,編譯器無(wú)法檢查不在枚舉中的int值。239.2.1枚舉引入的原因?yàn)榱俗尵幾g器能自動(dòng)檢查某個(gè)值是否在枚舉集合內(nèi),可以使用enum關(guān)鍵字來(lái)定義枚舉類。通過(guò)枚舉機(jī)制,編譯器可以在編譯期自動(dòng)檢查出可能的潛在錯(cuò)誤。枚舉是自定義類型的一個(gè)類,用來(lái)限制可能的取值,從而降低出錯(cuò)機(jī)率。由于枚舉類型的變量只能被賦予預(yù)定義的值,因此使用枚舉可以減少類型錯(cuò)誤的發(fā)生,提高代碼的安全性。枚舉可以用來(lái)定義一組相關(guān)的常量,這些常量在編譯時(shí)被確定,并且在運(yùn)行時(shí)不能更改,這有助于提高代碼的可讀性和安全性。示例代碼:SimpleEnumDemo.java
249.2.1枚舉引入的原因與采用int定義的常量相比,使用枚舉,編譯器會(huì)自動(dòng)檢查出類型錯(cuò)誤。例如,下面的代碼在比較整數(shù)值和枚舉類型常量時(shí)會(huì)出錯(cuò)。
intday=1;
if(day==Weekday.SUN){
//編譯錯(cuò)誤 //Compileerror:badoperandtypesforbinaryoperator'==‘
}
內(nèi)容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枚舉的定義枚舉是一個(gè)枚舉值的列表,每個(gè)枚舉值都是一個(gè)合法標(biāo)識(shí)符,通常標(biāo)識(shí)符全部用大寫字母,枚舉值之間用逗號(hào)(,)隔開(kāi)。枚舉類型定義的簡(jiǎn)潔形式如下:enum枚舉名{枚舉值1,枚舉值2,…,枚舉值n}
例如,下面語(yǔ)句定義了枚舉類型Level:
enumLevel{LOW,MEDIUM,HIGH}
Level是枚舉類型名稱,枚舉值LOW、MEDIUM、HIGH類似于常量,在引用枚舉值時(shí),必須使用枚舉類型名稱作為限定詞。下面語(yǔ)句定義了一個(gè)枚舉類型變量:
Levelmylevel=Level.LOW;
279.2.2枚舉定義Java語(yǔ)言把枚舉類型作為一個(gè)特殊的類對(duì)待,因此,枚舉類型變量是一個(gè)引用變量。所有枚舉類型都默認(rèn)擴(kuò)展一個(gè)抽象類java.lang.Enum,該抽象類Enum是Object類的子類,實(shí)現(xiàn)了Comparable接口和Serializable接口。枚舉類型繼承Object類的所有方法,實(shí)現(xiàn)了接口Comparable的compareTo方法,能夠被序列化。Enum中定義了兩個(gè)常用方法:
(1)publicStringname():返回枚舉常量的名字。
(2)publicintordinal():返回和枚舉值關(guān)聯(lián)的序號(hào)值。示例:LevelEnumsDemo.java
289-5定義枚舉類的關(guān)鍵字是()?EnumenumenumsEnumsABCD提交單選題1分299-6枚舉值之間用()隔開(kāi)逗號(hào),分號(hào);冒號(hào):括號(hào)[]ABCD提交單選題1分309-7枚舉類的哪個(gè)方法返回一個(gè)包含全部枚舉值的枚舉類型數(shù)組?name()compareTo()ordinal()values()ABCD提交單選題1分319-8哪個(gè)方法返回枚舉常量的名字?name()compareTo()valueOfvalues()ABCD提交單選題1分內(nèi)容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類一樣,也可以實(shí)現(xiàn)一個(gè)接口。示例:ColorEnum.java上面代碼定義了一個(gè)接口ColorPrinter,通過(guò)枚舉類型ColorEnum實(shí)現(xiàn)了該接口,并實(shí)現(xiàn)了該接口的抽象方法print()。下面代碼示范如何使用枚舉類型ColorEnum,代碼:TestColorEnum.java
33349-9定義如下接口,下面用枚舉實(shí)現(xiàn)接口語(yǔ)法正確的是()interfaceColorPrinter{voidprint();}public
enumColorEnumimplementsColorPrin
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《戰(zhàn)略更新課件:引領(lǐng)企業(yè)未來(lái)》
- 2025年江西省南昌市中考物理一調(diào)試卷(解析版)
- 合同終止時(shí)的員工權(quán)益
- 數(shù)據(jù)庫(kù)技術(shù)COMPUTER課件
- 鐵路橋隧無(wú)損檢測(cè)任務(wù)三隧道檢測(cè)的內(nèi)容課件
- 鐵路市場(chǎng)營(yíng)銷市場(chǎng)定位的涵義課件
- 鐵路信號(hào)與通信設(shè)備接發(fā)列車工作31課件
- 中醫(yī)灸法技能培訓(xùn)班課件
- 中專文化課課件
- SL631水利水電工程單元工程施工質(zhì)量驗(yàn)收標(biāo)準(zhǔn)第3部分:地基處理與基礎(chǔ)工程
- 2024-2025學(xué)年統(tǒng)編版七年級(jí)語(yǔ)文下冊(cè)第四單元檢測(cè)A卷(原卷+答案)
- 醫(yī)療器械操作規(guī)范與安全知識(shí)培訓(xùn)試題庫(kù)
- 安全閥培訓(xùn)課件
- 市場(chǎng)集中度與消費(fèi)者行為-全面剖析
- 視力檢查方法課件
- 2025年詩(shī)詞大賽考試指導(dǎo)題庫(kù)300題(含答案)
- 2025年河南職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)帶答案
- DB65-T 4850-2024 工貿(mào)行業(yè)企業(yè)重大安全風(fēng)險(xiǎn)認(rèn)定
- 交管12123駕駛證學(xué)法減分練習(xí)題庫(kù)(1000題版)
- 核心素養(yǎng)視角下的小學(xué)科學(xué)單元整體教學(xué)設(shè)計(jì)培訓(xùn)講座
評(píng)論
0/150
提交評(píng)論