




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第Java詳細(xì)分析講解泛型目錄1.泛型概念2.泛型的使用2.1泛型類語(yǔ)法2.2泛型方法語(yǔ)法2.3泛型接口語(yǔ)法2.4泛型在main方法中的使用3.擦除機(jī)制4.泛型的上界5.通配符5.1通配符的上界5.2通配符的下界6.包裝類6.1裝箱和拆箱
1.泛型概念
泛型就是將類型參數(shù)化
所謂類型參數(shù)化就是將類型定義成參數(shù)的形式,然后在使用此類型的時(shí)候的時(shí)候再傳入具體的類型
到這我們可以看出來:泛型在定義的時(shí)候是不知道具體類型的,需要在使用的時(shí)候傳入具體的類型,泛型可以用在類、接口和方法中,這樣做的好處是一個(gè)泛型可以適用多種情況
2.泛型的使用
2.1泛型類語(yǔ)法
publicclass類名T{......}
T表示這是一個(gè)泛型類,T是type的首字母大寫,除此之外的名稱還有:
E:element
K:key
V:vlaue
N:number
中可以有多個(gè)類型參數(shù),中間使用逗號(hào)隔開
2.2泛型方法語(yǔ)法
public泛型類型返回值方法名(泛型類型參數(shù)){......}
2.3泛型接口語(yǔ)法
publicinterface接口名泛型類型{......}
2.4泛型在main方法中的使用
下面寫一個(gè)泛型類來引出后面的內(nèi)容
classFcT{
privateTa;
publicTget(Tdata){
this.a=data;
returna;
}
前面說過泛型是在使用的時(shí)候再傳入具體的類型,所以在實(shí)例化上面泛型類的時(shí)候要指定類型。具體方式如下
類名具體類型變量名=new類名具體類型
注意:
等號(hào)右邊中可以不寫具體類型,編譯器可以根據(jù)上下文推導(dǎo)出此處的類型中只能寫入類,所以如果是基本數(shù)據(jù)類型,就需要寫入其對(duì)應(yīng)的包裝類,包裝類除int是Integer,char包裝類是Character外,其余均是首字母大寫Java中不能創(chuàng)建泛型數(shù)組,至于原因要從Java中泛型的機(jī)制說起
3.擦除機(jī)制
Java實(shí)現(xiàn)泛型是依靠這個(gè)擦除機(jī)制的,這個(gè)機(jī)制目前來講過于復(fù)雜,只說結(jié)果
Java編譯器在編譯的時(shí)候會(huì)去掉類型參數(shù),而對(duì)于泛型類型來說,如果指定上界會(huì)用上界類型進(jìn)行替換,沒有指定上界則會(huì)以O(shè)bject來進(jìn)行替換
所以在編譯的時(shí)候泛型類型都被替換成了Object,編譯后的class文件是不包含任何泛型信息的,即泛型信息不會(huì)進(jìn)入到運(yùn)行時(shí)階段
但Java的數(shù)組需要進(jìn)行運(yùn)行期類型檢查,而由于類型擦除,造成數(shù)組運(yùn)行期類型檢查不能正常進(jìn)行,破壞了Java數(shù)組運(yùn)行期類型檢查的機(jī)制
4.泛型的上界
所謂泛型的上界就是對(duì)傳入的類型變量進(jìn)行約束,指定哪些類型可以傳入,哪些不行,語(yǔ)法如下:
class類名類型參數(shù)extends類型邊界{......}
還是以上面的泛型類為例,現(xiàn)在改成如下情況:
classFcEextendsNumber{
privateEa;
publicEget(Edata){
this.a=data;
returna;
}
那么此時(shí)Fc就只能傳入Number或者其子類
5.通配符
通配符就是在泛型中使用,它是用來解決泛型無法協(xié)變的問題,那什么是協(xié)變?
假設(shè)有兩個(gè)類A和B,A繼承B,那么泛型FcA應(yīng)該也是FcB的子類,但泛型不支持這樣的父子關(guān)系
基于上面的情況,所以需要使用通配符
直接寫兩個(gè)類,A繼承B
classB{
}
classAextendsB{
}
現(xiàn)在把B改成
5.1通配符的上界
通配符也可以指定界限,語(yǔ)法和泛型的上界類似
extends類型邊界
假設(shè)extendsNumber,那么可以傳入的是Number及其子類
但需要注意的是:通配符的上界只能用來讀取數(shù)據(jù),不能用來寫入數(shù)據(jù)
因?yàn)槲覀冎恢览锩婵梢詡魅胧裁搭愋偷臄?shù)據(jù),但具體是什么類型我們不知道,所以也就無法對(duì)數(shù)據(jù)進(jìn)行修改,但是讀取則可以直接用父類對(duì)象來進(jìn)行接收讀取出來的數(shù)據(jù)
5.2通配符的下界
下界使用的是super
super類型邊界
superInteger表示可以傳入Integer或者其父類
通配符下界可以進(jìn)行寫入數(shù)據(jù),但不能用來讀取數(shù)據(jù)
原因也很簡(jiǎn)單,里面可以傳的類都是Integer或者它的父類,寫進(jìn)去的數(shù)據(jù)可以進(jìn)行轉(zhuǎn)化,但讀取數(shù)據(jù)用哪一個(gè)父類對(duì)象接收則不好確定了
6.包裝類
由于Java中基本數(shù)據(jù)類型不是繼承Object類,所以為了泛型能夠支持基本數(shù)據(jù)類型,每一個(gè)基本數(shù)據(jù)類型都有各自的包裝類
基本數(shù)據(jù)類型包裝類byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean
6.1裝箱和拆箱
裝箱就是把基本數(shù)據(jù)類型改為對(duì)應(yīng)的包裝類類型,拆箱就是和裝箱相反的操作
Java中提供了自動(dòng)裝箱和拆箱機(jī)制,但還是先來看下手動(dòng)裝箱和拆箱的操作
//手動(dòng)裝箱
inti=10;
Integerj=Integer.valueOf(i);//第一種操作
Integerj=newInteger(i);//第二種操作
//手動(dòng)拆箱
inta=Value();
自動(dòng)裝箱和拆箱的話代碼就要少的多
inti=10;
Integerj=i;//自動(dòng)裝箱
inta=j;//自動(dòng)拆箱
關(guān)于int的包裝類有一個(gè)比較有趣的地方,裝箱使用了valueOf方法,其源碼如下:
可以看到傳給方法的參數(shù)首先是和IntegerCache進(jìn)行比較,如果參數(shù)的值是在某個(gè)范圍中,那么返回的是數(shù)組里面的元素,否則返回新的對(duì)象
那我
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療大數(shù)轉(zhuǎn)型與公共衛(wèi)生服務(wù)優(yōu)化策略
- 醫(yī)療AI的監(jiān)管框架與數(shù)據(jù)隱私保護(hù)
- 五金建材批發(fā)合同范例
- 買手簽認(rèn)購(gòu)合同范例
- 區(qū)塊鏈技術(shù)在商業(yè)領(lǐng)域的合規(guī)性及法律環(huán)境分析
- 醫(yī)療信息化的安全管理與保障
- 公眾號(hào)制作服務(wù)合同范例
- 醫(yī)療器械的技術(shù)進(jìn)步與健康產(chǎn)業(yè)發(fā)展
- 幼兒骨干教師培訓(xùn)心得體會(huì)模版
- 醫(yī)療AI在健康教育中的倫理影響
- 2025-2030年中國(guó)海洋生物制藥市場(chǎng)競(jìng)爭(zhēng)格局及發(fā)展機(jī)會(huì)研究報(bào)告
- 2024年安徽安慶安桐城鄉(xiāng)發(fā)展集團(tuán)有限公司招聘真題
- 上海市延安中學(xué)2024-2025學(xué)年高三下學(xué)期4月診斷考試數(shù)學(xué)試題含解析
- 拆除冷庫(kù)施工方案
- 2025年九江市第一批面向社會(huì)公開招聘留置看護(hù)隊(duì)員【68人】筆試備考題庫(kù)及答案解析
- 2025-2030中國(guó)可再生能源行業(yè)發(fā)展分析及投資前景與戰(zhàn)略規(guī)劃研究報(bào)告
- 婚姻調(diào)查合同協(xié)議
- 10.1 美國(guó)課件2024-2025學(xué)年度七年級(jí)下學(xué)期人教版地理
- 鉚接粘接與錫焊教案
- 受限空間作業(yè)施工方案
- 工業(yè)數(shù)字孿生測(cè)試要求
評(píng)論
0/150
提交評(píng)論