Java程序設(shè)計(jì)基礎(chǔ) 課件 第9章 泛型與枚舉_第1頁
Java程序設(shè)計(jì)基礎(chǔ) 課件 第9章 泛型與枚舉_第2頁
Java程序設(shè)計(jì)基礎(chǔ) 課件 第9章 泛型與枚舉_第3頁
Java程序設(shè)計(jì)基礎(chǔ) 課件 第9章 泛型與枚舉_第4頁
Java程序設(shè)計(jì)基礎(chǔ) 課件 第9章 泛型與枚舉_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第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枚舉引入的原因用戶在使用集合處理對象時(shí),經(jīng)常需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換,這很容易帶來類型轉(zhuǎn)換異常問題。為此,Java設(shè)計(jì)了泛型機(jī)制將代碼的類型檢查提前到了編譯期間進(jìn)行,為類型安全提供保證。在泛型出現(xiàn)之前,Java使用Object類來實(shí)現(xiàn)泛型編程。例如,ArrayList通過維護(hù)一個(gè)Object引用數(shù)組來實(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);另外,這里沒有錯(cuò)誤檢查,可以向數(shù)組列表中添加任何類型的值。list.add("hello");list.add(newFile("....."));對于上面調(diào)用,編譯和運(yùn)行都不會出錯(cuò)。不過在其他地方,如果將get的結(jié)果強(qiáng)制類型轉(zhuǎn)換為String類型,就會產(chǎn)生一個(gè)錯(cuò)誤,例如:Stringstr=(String)list.get(0);Stringstr1=(String)list.get(1);當(dāng)執(zhí)行這句話時(shí)Stringstr1=(String)list.get(1),會報(bào)如下錯(cuò)誤:java.lang.ClassCastException:java.io.Filecannotbecasttojava.lang.String79.1.1泛型引入的原因Java泛型機(jī)制提供了一個(gè)更好的解決方案:類型參數(shù)(TypeParameter)。例如,在ArrayList類里,使用類型參數(shù)用來指定元素的類型,例如:ArrayList<String>files=newArrayList<String>();這樣使得代碼具有更好的可讀性,人們一看便知道該數(shù)組列表中包含的是String對象。編譯器也可以充分利用這個(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ù)的類。通過泛型類,可以創(chuàng)建具有通用性的類,可以在不同類型之間共享相同的代碼結(jié)構(gòu),同時(shí)保持類型安全性。在定義泛型類時(shí),可以在類名后面使用尖括號(<>)來指定一個(gè)或多個(gè)類型參數(shù),這些類型參數(shù)可以在類的方法和字段中使用,使得類的行為可以適應(yīng)不同的數(shù)據(jù)類型。對具有一個(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ù)的泛型類,其語法格式正確的是()修飾符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ù)。通過泛型接口,可以創(chuàng)建具有通用性的接口,以適應(yīng)不同類型的實(shí)現(xiàn)類。使用泛型接口可以提高代碼的靈活性和可重用性,同時(shí)確保類型安全。139.1.3泛型接口

具有一個(gè)參數(shù)的泛型接口,其定義一般形式如下:修飾符interface接口名<T>{//接口體}

示例代碼:BrotherPrinter.java上面示例是使用泛型類對泛型接口進(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枚舉引入的原因如果類和接口沒有定義泛型,但是想在方法中使用泛型,例如在方法中接收一個(gè)泛型參數(shù),此時(shí)可以將該方法定義為泛型方法,泛型方法定義的一般形式如下:

訪問修飾符<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ù)之間用逗號分開。

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中,可以通過staticfinal來定義常量。如果需要定義周一到周日這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枚舉引入的原因

無論是int常量還是String常量,使用這些常量來表示一組枚舉值時(shí),會有一個(gè)潛在的問題,即編譯器無法檢查每個(gè)值的合理性。例如,

if(weekday==6||weekday==7){

//dosomething

}

上述代碼編譯和運(yùn)行均不會報(bào)錯(cuò),但還存在問題,Weekday定義的常量范圍是0~6,并不包含7,編譯器無法檢查不在枚舉中的int值。239.2.1枚舉引入的原因?yàn)榱俗尵幾g器能自動檢查某個(gè)值是否在枚舉集合內(nèi),可以使用enum關(guān)鍵字來定義枚舉類。通過枚舉機(jī)制,編譯器可以在編譯期自動檢查出可能的潛在錯(cuò)誤。枚舉是自定義類型的一個(gè)類,用來限制可能的取值,從而降低出錯(cuò)機(jī)率。由于枚舉類型的變量只能被賦予預(yù)定義的值,因此使用枚舉可以減少類型錯(cuò)誤的發(fā)生,提高代碼的安全性。枚舉可以用來定義一組相關(guān)的常量,這些常量在編譯時(shí)被確定,并且在運(yùn)行時(shí)不能更改,這有助于提高代碼的可讀性和安全性。示例代碼:SimpleEnumDemo.java

249.2.1枚舉引入的原因與采用int定義的常量相比,使用枚舉,編譯器會自動檢查出類型錯(cuò)誤。例如,下面的代碼在比較整數(shù)值和枚舉類型常量時(shí)會出錯(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)識符,通常標(biāo)識符全部用大寫字母,枚舉值之間用逗號(,)隔開。枚舉類型定義的簡潔形式如下:enum枚舉名{枚舉值1,枚舉值2,…,枚舉值n}

例如,下面語句定義了枚舉類型Level:

enumLevel{LOW,MEDIUM,HIGH}

Level是枚舉類型名稱,枚舉值LOW、MEDIUM、HIGH類似于常量,在引用枚舉值時(shí),必須使用枚舉類型名稱作為限定詞。下面語句定義了一個(gè)枚舉類型變量:

Levelmylevel=Level.LOW;

279.2.2枚舉定義Java語言把枚舉類型作為一個(gè)特殊的類對待,因此,枚舉類型變量是一個(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)的序號值。示例:LevelEnumsDemo.java

289-5定義枚舉類的關(guān)鍵字是()?EnumenumenumsEnumsABCD提交單選題1分299-6枚舉值之間用()隔開逗號,分號;冒號:括號[]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,通過枚舉類型ColorEnum實(shí)現(xiàn)了該接口,并實(shí)現(xiàn)了該接口的抽象方法print()。下面代碼示范如何使用枚舉類型ColorEnum,代碼:TestColorEnum.java

33349-9定義如下接口,下面用枚舉實(shí)現(xiàn)接口語法正確的是()interfaceColorPrinter{voidprint();}public

enumColorEnumimplementsColorPrin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論