日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

你不知道Java的10件事

瀏覽:41日期:2022-09-06 15:42:58

你從一開(kāi)始就在使用Java嗎?你是否還記得java被稱(chēng)作為”Oak”的時(shí)期?那時(shí),面向?qū)ο笕匀皇且粋€(gè)熱門(mén)的話(huà)題,使用C++的人們都認(rèn)為Java沒(méi)有任何機(jī)會(huì),Applets 也只是一件事情。

你不知道Java的10件事

我敢打賭你肯定不知道以下一半的事情。現(xiàn)在,讓我們開(kāi)始一些Java內(nèi)部運(yùn)作的大驚喜。

1. 并沒(méi)有所謂的檢查異常

沒(méi)錯(cuò),Java虛擬機(jī)(JVM)不知道異常,只有Java語(yǔ)言自己知道.

如今,每個(gè)人都同意檢查異常是一個(gè)錯(cuò)誤。正如Bruce Eckel 在Prague的 GeeCON 閉幕詞上所說(shuō),在Java之后沒(méi)有其他語(yǔ)言會(huì)約定使用檢查異常,甚至 Java 8 新的流API都不再包含這些(在lambdas表達(dá)式中使用IO 或者JDBC時(shí),是有點(diǎn)痛苦)。

(譯者注:Java8 引入了lambads表達(dá)式,使用它能夠使設(shè)計(jì)代碼更簡(jiǎn)潔)

使用下面的代碼可以證明JVM并不知道這些:

你不知道Java的10件事

上面的代碼不僅能通過(guò)編譯,而且拋出了異常SQLException,你甚至不需要使用Lombok’s 的注解@SneakyThrows。

(譯者注:Lombok是一個(gè)使用注解簡(jiǎn)化Java代碼的庫(kù))

(譯者注:如果你在方法中沒(méi)有聲明throws子句,當(dāng)程序出現(xiàn)異常時(shí)Lomok 注解@SneakyThrows 會(huì)偷偷的拋出檢查異常)點(diǎn)這里獲取關(guān)于這篇文章的更多細(xì)節(jié),或 Stack Overflow。

2. 重載僅返回類(lèi)型不同的方法

這不能通過(guò)編譯,不是嗎?

你不知道Java的10件事

是的。Java語(yǔ)言不允許在同一個(gè)類(lèi)中存在"等價(jià)覆蓋" 的兩個(gè)方法.不管它們有不同的 throws 子句或是不同的返回類(lèi)型。

在 Javadoc Class.getMethod(String,Class...)。上面有如下說(shuō)明:

注意:它在一個(gè)類(lèi)中可能會(huì)匹配到多個(gè)方法,雖然Java語(yǔ)言禁止在一個(gè)類(lèi)中聲明多個(gè)簽名相同而僅返回類(lèi)型不同的方法,但是Java虛擬機(jī)不會(huì)如此。在Java虛擬機(jī)中,這種增強(qiáng) 的靈活性被用于實(shí)現(xiàn)多樣的語(yǔ)言特性。例如,協(xié)變返回值類(lèi)型能通過(guò)橋接方法實(shí)現(xiàn);橋接方法和被覆蓋的方法將有相同的簽名,不同的返回類(lèi)型。

這很有意義,事實(shí)上,下面的語(yǔ)句所發(fā)生的幾乎就是這樣。

你不知道Java的10件事

查看生成的字節(jié)碼:

你不知道Java的10件事

因此,很好理解 T 在字節(jié)碼中就是一個(gè)對(duì)象。

這個(gè)合成的橋接方法實(shí)際上是由編譯器生成的,因?yàn)镻arent.x()的返回類(lèi)型簽名在某些調(diào)用位置可能會(huì)被期望成 Object。

加入的泛型沒(méi)有這樣的橋接方法就不可能以一種二進(jìn)制的方式兼容。

因此,改變JVM去支持這種特性只需很少的代價(jià)(同樣也允許協(xié)變性壓倒一切負(fù)效應(yīng))很聰明,不是嗎?

你分析過(guò)語(yǔ)言的細(xì)節(jié)和內(nèi)幕嗎?點(diǎn)這里發(fā)現(xiàn)更多有趣的細(xì)節(jié)。

3. 這些都是二維數(shù)組

你不知道Java的10件事

這是真的。你可能無(wú)法立刻理解上面方法的返回類(lèi)型,但它們都是一樣的。類(lèi)似于下面的方法:

你不知道Java的10件事

你肯定認(rèn)為這瘋了。想象一下,為上面的方法使用 JSR-308 / Java 8 的類(lèi)型注解。句法的數(shù)量將會(huì)激增。

你不知道Java的10件事

4. 你不明白條件表達(dá)式

你認(rèn)為你在使用條件表達(dá)式時(shí)明白一切嗎?讓我告訴你吧,你不明白。大多數(shù)人都會(huì)認(rèn)為下面兩個(gè)代碼片段是等價(jià)的:

你不知道Java的10件事

真的一樣嗎?

你不知道Java的10件事

不一樣。我們來(lái)驗(yàn)證一下:

你不知道Java的10件事

程序的輸出結(jié)果為:

1.01

沒(méi)錯(cuò)!條件運(yùn)算符在必要的時(shí)候?qū)?shí)現(xiàn)數(shù)據(jù)類(lèi)型的提升。下面的語(yǔ)句將會(huì)拋出一個(gè)NullPointException。

你不知道Java的10件事

點(diǎn)這里獲取更多細(xì)節(jié)。

5. 你也不明白復(fù)合賦值運(yùn)算符

看下面的代碼:

你不知道Java的10件事

乍一看它們應(yīng)該是等價(jià)的,但事實(shí)上不是。見(jiàn) JSL(Java語(yǔ)言規(guī)范):

復(fù)合賦值表達(dá)式 E1 op= E2 與 E1 = (T)((E1) op (E2)) 是等價(jià)的,T的類(lèi)型與E1相同,此外 E1僅計(jì)算一次。

這真是太美了,我想引用Peter Lawrey's 關(guān)于堆棧溢出問(wèn)題的回答:

你不知道Java的10件事

6. 隨機(jī)整數(shù)

這是一個(gè)難題。不要參看解答,你能獨(dú)立的解決問(wèn)題嗎?

運(yùn)行下面的代碼:

你不知道Java的10件事

我有時(shí)候會(huì)得到如下輸出:

922214548236183391933384

這怎么可能?

答案在這。通過(guò)反射覆蓋 JDK's 的 Integercache,然后使用自動(dòng)裝箱和自動(dòng)拆箱機(jī)制。

你不知道Java的10件事

運(yùn)行上面的代碼,你就可以得到類(lèi)似的結(jié)果了。

7. GOTO

在Java中編寫(xiě)下列語(yǔ)句:

你不知道Java的10件事

程序會(huì)編譯失敗,錯(cuò)誤信息為:

你不知道Java的10件事

因?yàn)間oto是一個(gè)未使用的關(guān)鍵字。

雖然無(wú)法在源碼中直接使用 goto 但是我們可以通過(guò) break,continue 和 標(biāo)記塊實(shí)現(xiàn)。

字節(jié)碼的 goto;

向前跳轉(zhuǎn):

你不知道Java的10件事

它的字節(jié)碼為:

你不知道Java的10件事

向后跳轉(zhuǎn):

你不知道Java的10件事

它的字節(jié)碼為:

你不知道Java的10件事

看,是不是出現(xiàn)了goto

8. Java 的類(lèi)型別名

在其他語(yǔ)言中可以很簡(jiǎn)單的使用類(lèi)型別名,例如Ceylon:

(譯者注:Ceylon是一種新興的計(jì)算機(jī)編程語(yǔ)言,號(hào)稱(chēng)"Java殺手",它不是Java,而是一種受Java影響的新語(yǔ)言。)

你不知道Java的10件事

以這種方式構(gòu)造的 People 可以被 Set<Person> 替換:

你不知道Java的10件事

在Java中,我們無(wú)法在全局范圍上定義類(lèi)型別名。由于存在 class 域或方法域,

亦可以定義。考慮兩個(gè)我們很不喜歡的命名 Integer 和 Long,為它們?nèi)€(gè)簡(jiǎn)短的名稱(chēng) I 和 L:

你不知道Java的10件事

上面的程序中,在 TestClass 域內(nèi) 定義 Integer 別名為 I,在 x() 方法域中定義Long

別名為 L。我們可以這樣使用上面的方法:

你不知道Java的10件事

顯然這種技術(shù)不值得重視。在這個(gè)例子中,Integer 和 Long 都是 final 類(lèi)型,也就意味著類(lèi)型 I 和 L 是有效的別名(那樣的話(huà),程序與類(lèi)型兼容性也就無(wú)緣了)。如果我們使用的不是 final 類(lèi)型,那么就應(yīng)該使用泛型。

看夠了這些無(wú)聊的把戲了吧!來(lái)點(diǎn)厲害的。

9. 一些不可判定的關(guān)系類(lèi)型

讓我們來(lái)點(diǎn)咖啡,集中你的注意力,這可是很時(shí)髦的東西。考慮下面兩個(gè)類(lèi)型:

你不知道Java的10件事

現(xiàn)在,你知道 C 和 D 的類(lèi)型嗎?

它們包含了遞歸,Java、lang、Enum 也是遞歸的。這兩種方式有些相似,但略有不同。

你不知道Java的10件事

由上面的規(guī)范可知,Enum 實(shí)際上是由一種糖衣語(yǔ)法實(shí)現(xiàn)的。

(譯者注:糖衣語(yǔ)法,指計(jì)算機(jī)語(yǔ)言中添加的某種語(yǔ)法,這種語(yǔ)法對(duì)語(yǔ)言的功能并沒(méi)有影響,但是更方便程序員使用)

你不知道Java的10件事

考慮到這一點(diǎn),讓我們回到先前定義的兩個(gè)類(lèi)型。下列代碼能編譯成功嗎?

你不知道Java的10件事

很難回答,Ross Tate 有個(gè)答案,不可判定:

你不知道Java的10件事

嘗試在你的Eclipse中編譯上面的代碼,崩潰了吧!

看這句話(huà):

有些類(lèi)型關(guān)系在Java中是不可判定的。

如果你有興趣了解這個(gè)奇怪的Java特性更多細(xì)節(jié),就讀一讀 Ross Tate的論文"Taming Wildcards in Java's Type System"(與 Alan Leung 和 Sorin Lerner 合著),或者自己思考關(guān)聯(lián)子類(lèi)型多態(tài)性與泛型多態(tài)性。

10. 交集類(lèi)型

Java有一個(gè)很獨(dú)特的特性稱(chēng)作交集類(lèi)型(type intersections)。你可以聲明一個(gè)泛型,它由兩個(gè)類(lèi)型的交集構(gòu)成。例如:

你不知道Java的10件事

要使用綁定的泛型參數(shù) T 去實(shí)例化Test 類(lèi),這個(gè)參數(shù)就必須同時(shí)實(shí)現(xiàn) Serializable 和 Cloneable。例如 String 不是,而 Date 是:

你不知道Java的10件事

為了讓你有一個(gè)專(zhuān)門(mén)的交集類(lèi)型,這種特性在Java8中得到了重用。如何用它呢?幾乎沒(méi)用。但是,當(dāng)你在 lambda 表達(dá)式中強(qiáng)行應(yīng)用這樣的類(lèi)型時(shí),就只有此種方法可行。

假設(shè)你在方法中使用了這種瘋狂的類(lèi)型約束:

你不知道Java的10件事

你需要一個(gè)實(shí)現(xiàn)了Runnable 和Serializable 的對(duì)象。為了讓你可以在某些地方執(zhí)行它,或是發(fā)送它,

Lambads 可以被序列化:

如果一個(gè)lambda 表達(dá)式的目標(biāo)類(lèi)型和所需參數(shù)是可序列化的,那么這個(gè)表達(dá)式就能序列化。

即使這是真的,那也不會(huì)自動(dòng)的實(shí)現(xiàn)序列化標(biāo)記接口,所以你必須自己動(dòng)手。

現(xiàn)在你有一個(gè)可序列化的,但是它不能被執(zhí)行。

你不知道Java的10件事

所以你必須自己加上:

你不知道Java的10件事

英文:DZone,譯者:黑蔥

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲大片在线| 一本色道精品久久一区二区三区| 国产日韩中文在线中文字幕 | 色婷婷成人网| 国产欧美三级| 久久久一二三| 老鸭窝毛片一区二区三区| 亚洲一区二区三区久久久| 日本免费一区二区视频| 久久精品一区二区国产| 久久婷婷丁香| 久久国产99| 美腿丝袜亚洲一区| 激情综合亚洲| 国产日本久久| 日韩欧美精品| 亚洲精品日本| 国内自拍视频一区二区三区| 在线观看免费一区二区| 国产亚洲精品美女久久久久久久久久| 精品久久久网| 99在线|亚洲一区二区| 久久国产免费看| 国产精品99一区二区| 欧美久久一区二区三区| 99久久精品国产亚洲精品| 日本不卡视频一二三区| 高潮一区二区| 日韩黄色av| a日韩av网址| 亚洲免费一区三区| 麻豆国产在线| 久久狠狠亚洲综合| 樱桃成人精品视频在线播放| 欧美a在线观看| 乱人伦精品视频在线观看| 久久精品女人| 亚洲精品日本| 日韩精品午夜| 欧美激情福利| 日韩综合一区二区| 影视先锋久久| 麻豆国产一区| 亚洲欧洲美洲国产香蕉| 久久久人人人| 久久精品国产亚洲一区二区三区| 日本欧美在线看| 欧美一级鲁丝片| 国产精品一区二区三区美女| 水蜜桃久久夜色精品一区的特点 | 成人午夜精品| 国产精品综合色区在线观看| 欧美日韩激情| 国产h片在线观看| 免费视频一区二区三区在线观看| 中文字幕亚洲精品乱码| 亚洲二区在线| 欧美日韩视频网站| 久久免费福利| 欧美日韩亚洲一区三区| 亚洲精选成人| 欧美精品一区二区三区精品| 91一区二区| 久久亚洲黄色| 国产精品网站在线看| 日本99精品| 婷婷综合国产| 丝袜美腿亚洲一区二区图片| 亚洲激情五月| 在线日韩中文| 亚洲高清激情| 亚洲天堂成人| 免费视频一区三区| 亚洲国产欧美日本视频| 精品一区不卡| 国产精品久久久久久久久久妞妞 | 一区免费在线| 蜜桃成人av| 99久久精品网站| 欧美sss在线视频| 国产精品精品| 久久久久免费| 午夜影院一区| 成人免费网站www网站高清| 9999国产精品| 秋霞影院一区二区三区| 免费污视频在线一区| 国产字幕视频一区二区| 亚洲国产成人精品女人| 黄色亚洲免费| 免费在线观看一区二区三区| 久久午夜影视| 亚洲狼人精品一区二区三区| 亚洲专区视频| 亚洲精一区二区三区| 婷婷综合福利| 国产人成精品一区二区三| 国产伦理一区| 六月丁香综合在线视频| 国产精品久久久久久久免费观看 | 91一区二区三区四区| 国产亚洲一区二区手机在线观看| 97精品视频在线看| 欧美中文一区二区| 久久成人国产| 日韩专区视频网站| 欧美韩一区二区| 激情国产在线| 99在线精品免费视频九九视| 一级成人国产| 国产精品亚洲综合久久| 中文字幕人成乱码在线观看| 久久久水蜜桃av免费网站| 99国产精品99久久久久久粉嫩| 亚洲精品伊人| 国产精品对白| 久久国产电影| 亚洲a级精品| 久久亚洲人体| 日韩精品一区二区三区免费观影 | 国产精品综合| 日本精品不卡| 久久国产精品久久久久久电车 | 合欧美一区二区三区| 天堂成人国产精品一区| 91精品国产自产精品男人的天堂| 精品国产午夜| 亚洲一本视频| 日本成人中文字幕| 国产一区二区三区四区大秀| 1024精品久久久久久久久| 亚洲精品婷婷| 成人在线超碰| 免费日韩视频| 老色鬼精品视频在线观看播放| 免费污视频在线一区| 亚洲色图网站| 成人黄色av| 久久福利毛片| 精品久久久久久久| 男女激情视频一区| 高清日韩欧美| 亚洲精品国产日韩| 欧美不卡高清一区二区三区| 日本免费新一区视频| 在线日韩欧美| 麻豆国产91在线播放| 免费国产自线拍一欧美视频| 精品国产午夜| 亚洲永久精品唐人导航网址| 高清一区二区三区av| 亚洲ww精品| 激情久久五月| 久久精品一本| 亚洲一区二区三区中文字幕在线观看| 精品福利久久久| 中文字幕一区二区精品区| 欧美sm一区| 国产精品视频一区二区三区| 中文亚洲欧美| 日本不卡免费高清视频在线| 日韩和欧美的一区| 夜夜精品视频| 欧美一区久久久| 国产精品扒开腿做爽爽爽软件| 亚洲精品一区二区妖精| 国产一区二区久久久久| 日本欧美一区二区| 在线亚洲免费| 91精品韩国| 麻豆精品视频在线观看| 乱人伦精品视频在线观看| 欧美二三四区| 欧美激情福利| 日韩国产91| 首页国产欧美日韩丝袜| 视频福利一区| 精品视频一区二区三区在线观看| 亚洲午夜久久| 99国产精品视频免费观看一公开 | 六月婷婷一区| 99久久夜色精品国产亚洲狼| 免费亚洲婷婷| 国产欧美另类| 丝袜脚交一区二区| 99精品在线免费在线观看| 国产一区一一区高清不卡| 中文另类视频| 98精品久久久久久久| 国产精品magnet| 日韩av中文字幕一区二区三区| 久久不射网站| 亚洲欧美久久久| 亚洲激情另类| 好吊一区二区三区| 亚洲大片在线| 欧美 日韩 国产精品免费观看| 精品国产精品久久一区免费式| 欧美日韩一区二区三区不卡视频| 欧美日韩精品一本二本三本|