【深入java虛擬機(jī)(6)】:java語(yǔ)法糖-編程開(kāi)發(fā)技術(shù)

【深入java虛擬機(jī)(6)】:java語(yǔ)法糖-編程開(kāi)發(fā)技術(shù)

ID:31000713

大小:79.00 KB

頁(yè)數(shù):3頁(yè)

時(shí)間:2019-01-05

【深入java虛擬機(jī)(6)】:java語(yǔ)法糖-編程開(kāi)發(fā)技術(shù)_第1頁(yè)
【深入java虛擬機(jī)(6)】:java語(yǔ)法糖-編程開(kāi)發(fā)技術(shù)_第2頁(yè)
【深入java虛擬機(jī)(6)】:java語(yǔ)法糖-編程開(kāi)發(fā)技術(shù)_第3頁(yè)
資源描述:

《【深入java虛擬機(jī)(6)】:java語(yǔ)法糖-編程開(kāi)發(fā)技術(shù)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。

1、【深入Java虛擬機(jī)(6)】:Java語(yǔ)法糖-編程開(kāi)發(fā)技術(shù)【深入Java虛擬機(jī)(6)]:Java語(yǔ)法糖原文出處:蘭亭風(fēng)雨語(yǔ)法糖(Syntactic?Sugar),也稱糖衣語(yǔ)法,是由英國(guó)計(jì)算機(jī)學(xué)家Peter.J.Landin發(fā)明的一個(gè)術(shù)語(yǔ),指在計(jì)算機(jī)語(yǔ)言中添加的某種語(yǔ)法,這種語(yǔ)法對(duì)語(yǔ)言的功能并沒(méi)冇影響,但是更方便程序員使用。Java+最常用的語(yǔ)法糖主要有泛型、變長(zhǎng)參數(shù)、條件編譯、自動(dòng)拆裝箱、內(nèi)部類等。虛擬機(jī)并不支持這些語(yǔ)法,它們?cè)诰幾g階段就被還原冋了簡(jiǎn)單的基礎(chǔ)語(yǔ)法結(jié)構(gòu),這個(gè)過(guò)程成為解語(yǔ)法糖。泛型是JDK1.5Z后

2、引入的一項(xiàng)新特性,Java語(yǔ)言在還沒(méi)有出現(xiàn)泛型時(shí),只能通過(guò)Object是所有類型的父類和類型強(qiáng)制轉(zhuǎn)換這兩個(gè)特點(diǎn)的配合來(lái)實(shí)現(xiàn)泛型的功能,這樣實(shí)現(xiàn)的泛型功能要在程序運(yùn)行期才能知道Object真止的對(duì)象類型,在Javac編譯期,編譯器無(wú)法檢查這個(gè)Object的強(qiáng)制轉(zhuǎn)型是否成功,這便將一些風(fēng)險(xiǎn)轉(zhuǎn)接到了程序運(yùn)行期中?!?腹語(yǔ)言在JDK1.5Z后引入的泛型實(shí)際上只在程序源碼中存在,在編譯后的字節(jié)碼文件屮,就已經(jīng)被替換為了原來(lái)的原生類型,并冃在相應(yīng)的地方插入了強(qiáng)制轉(zhuǎn)型代碼,因此對(duì)于運(yùn)彳亍期的Java語(yǔ)言來(lái)說(shuō),ArrayLis

3、t和ArrayList就是同一個(gè)類。所以泛型技術(shù)實(shí)際上是Java語(yǔ)言的一顆語(yǔ)法糖,Java語(yǔ)言中的泛型實(shí)現(xiàn)方法稱為類型擦除,基于這種方法實(shí)現(xiàn)的泛型被稱為偽泛型。下而是一段簡(jiǎn)單的Java泛型代碼:Mapmap二newHashMap();map.put(1,"No.1〃);map.put(2,"No.2〃);Systcm.out?printin(map?gct(l));System.out.printin(map?ge

4、t(2));將這段Java代碼編譯成Class文件,然后再用字節(jié)碼反編譯工具進(jìn)行反編譯后,將會(huì)發(fā)現(xiàn)泛型都變回了原生類型,如下面的代碼所示:Mapmap二newHashMap();map.put(1,"No.1〃);map.put(2,"No.2〃);System,out.printin((String)map.get(1));System,out.println((String)map.get(2));為了更詳細(xì)地說(shuō)明類型擦除,再看如下代碼:importjava.util.List;publicclassFan

5、xingTest{publicvoidmethod(Listlist){System,out.println("ListStringz,);}publicvoidmethod(Listlist){System,out?printin("ListInt〃);}}當(dāng)我用Jewac編譯器編譯這段代碼時(shí),報(bào)出了如下錯(cuò)誤:FanxingTest.java:3:?名稱沖突:method(java,util.List

6、List)?具有相同疑符????????public?void?method(List?list){????????????????????八FanxingTest.java:6:?名稱沖突:method(java?uti1.List)?和?method(java.util.List)?具有相同疑符????????public?void?method(List?lis

7、t){????????????????????八2?錯(cuò)謀這是因?yàn)榉盒蚅ist和List編譯后都被擦除了,變成了一樣的原生類型List,擦除動(dòng)作導(dǎo)致這兩個(gè)方法的特征簽名變得一模一樣,在Class類文件結(jié)構(gòu)一文屮講過(guò),Class文件屮不能存在特征簽名相同的方法。把以上代碼修改如下:importjava.util.List;publicclassFanxingTest{publicintmethod(Listlist){System,out.println(z,Lis

8、tStringz,);return1;}publicbooleanmethoc!(List〈lnteger>list){System.out.println("ListInt〃);returntrue;發(fā)現(xiàn)這時(shí)編譯可以通過(guò)了(注意:Java語(yǔ)言中true和1沒(méi)有關(guān)聯(lián),二者屬于不同的類型,不能相互轉(zhuǎn)換,不存在C語(yǔ)言屮整數(shù)值?非零即真的情況)。兩個(gè)不同類型的返回值的加入,使得方法的重載成功

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。