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

您的位置:首頁技術文章
文章詳情頁

你不知道Java的10件事

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

你從一開始就在使用Java嗎?你是否還記得java被稱作為”Oak”的時期?那時,面向對象仍然是一個熱門的話題,使用C++的人們都認為Java沒有任何機會,Applets 也只是一件事情。

你不知道Java的10件事

我敢打賭你肯定不知道以下一半的事情?,F在,讓我們開始一些Java內部運作的大驚喜。

1. 并沒有所謂的檢查異常

沒錯,Java虛擬機(JVM)不知道異常,只有Java語言自己知道.

如今,每個人都同意檢查異常是一個錯誤。正如Bruce Eckel 在Prague的 GeeCON 閉幕詞上所說,在Java之后沒有其他語言會約定使用檢查異常,甚至 Java 8 新的流API都不再包含這些(在lambdas表達式中使用IO 或者JDBC時,是有點痛苦)。

(譯者注:Java8 引入了lambads表達式,使用它能夠使設計代碼更簡潔)

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

你不知道Java的10件事

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

(譯者注:Lombok是一個使用注解簡化Java代碼的庫)

(譯者注:如果你在方法中沒有聲明throws子句,當程序出現異常時Lomok 注解@SneakyThrows 會偷偷的拋出檢查異常)點這里獲取關于這篇文章的更多細節,或 Stack Overflow。

2. 重載僅返回類型不同的方法

這不能通過編譯,不是嗎?

你不知道Java的10件事

是的。Java語言不允許在同一個類中存在"等價覆蓋" 的兩個方法.不管它們有不同的 throws 子句或是不同的返回類型。

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

注意:它在一個類中可能會匹配到多個方法,雖然Java語言禁止在一個類中聲明多個簽名相同而僅返回類型不同的方法,但是Java虛擬機不會如此。在Java虛擬機中,這種增強 的靈活性被用于實現多樣的語言特性。例如,協變返回值類型能通過橋接方法實現;橋接方法和被覆蓋的方法將有相同的簽名,不同的返回類型。

這很有意義,事實上,下面的語句所發生的幾乎就是這樣。

你不知道Java的10件事

查看生成的字節碼:

你不知道Java的10件事

因此,很好理解 T 在字節碼中就是一個對象。

這個合成的橋接方法實際上是由編譯器生成的,因為Parent.x()的返回類型簽名在某些調用位置可能會被期望成 Object。

加入的泛型沒有這樣的橋接方法就不可能以一種二進制的方式兼容。

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

你分析過語言的細節和內幕嗎?點這里發現更多有趣的細節。

3. 這些都是二維數組

你不知道Java的10件事

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

你不知道Java的10件事

你肯定認為這瘋了。想象一下,為上面的方法使用 JSR-308 / Java 8 的類型注解。句法的數量將會激增。

你不知道Java的10件事

4. 你不明白條件表達式

你認為你在使用條件表達式時明白一切嗎?讓我告訴你吧,你不明白。大多數人都會認為下面兩個代碼片段是等價的:

你不知道Java的10件事

真的一樣嗎?

你不知道Java的10件事

不一樣。我們來驗證一下:

你不知道Java的10件事

程序的輸出結果為:

1.01

沒錯!條件運算符在必要的時候將實現數據類型的提升。下面的語句將會拋出一個NullPointException。

你不知道Java的10件事

點這里獲取更多細節。

5. 你也不明白復合賦值運算符

看下面的代碼:

你不知道Java的10件事

乍一看它們應該是等價的,但事實上不是。見 JSL(Java語言規范):

復合賦值表達式 E1 op= E2 與 E1 = (T)((E1) op (E2)) 是等價的,T的類型與E1相同,此外 E1僅計算一次。

這真是太美了,我想引用Peter Lawrey's 關于堆棧溢出問題的回答:

你不知道Java的10件事

6. 隨機整數

這是一個難題。不要參看解答,你能獨立的解決問題嗎?

運行下面的代碼:

你不知道Java的10件事

我有時候會得到如下輸出:

922214548236183391933384

這怎么可能?

答案在這。通過反射覆蓋 JDK's 的 Integercache,然后使用自動裝箱和自動拆箱機制。

你不知道Java的10件事

運行上面的代碼,你就可以得到類似的結果了。

7. GOTO

在Java中編寫下列語句:

你不知道Java的10件事

程序會編譯失敗,錯誤信息為:

你不知道Java的10件事

因為goto是一個未使用的關鍵字。

雖然無法在源碼中直接使用 goto 但是我們可以通過 break,continue 和 標記塊實現。

字節碼的 goto;

向前跳轉:

你不知道Java的10件事

它的字節碼為:

你不知道Java的10件事

向后跳轉:

你不知道Java的10件事

它的字節碼為:

你不知道Java的10件事

看,是不是出現了goto

8. Java 的類型別名

在其他語言中可以很簡單的使用類型別名,例如Ceylon:

(譯者注:Ceylon是一種新興的計算機編程語言,號稱"Java殺手",它不是Java,而是一種受Java影響的新語言。)

你不知道Java的10件事

以這種方式構造的 People 可以被 Set<Person> 替換:

你不知道Java的10件事

在Java中,我們無法在全局范圍上定義類型別名。由于存在 class 域或方法域,

亦可以定義??紤]兩個我們很不喜歡的命名 Integer 和 Long,為它們取個簡短的名稱 I 和 L:

你不知道Java的10件事

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

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

你不知道Java的10件事

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

看夠了這些無聊的把戲了吧!來點厲害的。

9. 一些不可判定的關系類型

讓我們來點咖啡,集中你的注意力,這可是很時髦的東西。考慮下面兩個類型:

你不知道Java的10件事

現在,你知道 C 和 D 的類型嗎?

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

你不知道Java的10件事

由上面的規范可知,Enum 實際上是由一種糖衣語法實現的。

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

你不知道Java的10件事

考慮到這一點,讓我們回到先前定義的兩個類型。下列代碼能編譯成功嗎?

你不知道Java的10件事

很難回答,Ross Tate 有個答案,不可判定:

你不知道Java的10件事

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

看這句話:

有些類型關系在Java中是不可判定的。

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

10. 交集類型

Java有一個很獨特的特性稱作交集類型(type intersections)。你可以聲明一個泛型,它由兩個類型的交集構成。例如:

你不知道Java的10件事

要使用綁定的泛型參數 T 去實例化Test 類,這個參數就必須同時實現 Serializable 和 Cloneable。例如 String 不是,而 Date 是:

你不知道Java的10件事

為了讓你有一個專門的交集類型,這種特性在Java8中得到了重用。如何用它呢?幾乎沒用。但是,當你在 lambda 表達式中強行應用這樣的類型時,就只有此種方法可行。

假設你在方法中使用了這種瘋狂的類型約束:

你不知道Java的10件事

你需要一個實現了Runnable 和Serializable 的對象。為了讓你可以在某些地方執行它,或是發送它,

Lambads 可以被序列化:

如果一個lambda 表達式的目標類型和所需參數是可序列化的,那么這個表達式就能序列化。

即使這是真的,那也不會自動的實現序列化標記接口,所以你必須自己動手。

現在你有一個可序列化的,但是它不能被執行。

你不知道Java的10件事

所以你必須自己加上:

你不知道Java的10件事

英文:DZone,譯者:黑蔥

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品久久久久久久免费软件| 国产亚洲一区在线| 午夜亚洲福利| 亚洲人妖在线| 欧美日本不卡高清| 美女精品久久| 国产69精品久久| 日韩免费福利视频| 99久久夜色精品国产亚洲狼| 亚洲网站视频| 日韩三区免费| 国内精品福利| 亚洲免费婷婷| 日韩高清不卡在线| 里番精品3d一二三区| 精品国产99| 久久精品电影| 亚洲欧美日韩在线观看a三区| 亚洲日产国产精品| 国产精品一区三区在线观看| 精品一区二区三区免费看| 麻豆国产在线| 国产午夜精品一区二区三区欧美 | 久久久水蜜桃av免费网站| 亚洲调教视频在线观看| 石原莉奈在线亚洲二区| 国产日韩欧美一区在线| 亚洲黄色网址| 在线视频亚洲| 国产日韩欧美在线播放不卡| 色欧美自拍视频| 伊人成人网在线看| 日韩在线观看中文字幕| 久久不见久久见免费视频7| 成人三级高清视频在线看| 欧美日韩国产免费观看视频| 日韩有码av| 久久伊人国产| 激情综合网五月| 日本免费新一区视频| 红杏一区二区三区| 先锋亚洲精品| 欧美成人aaa| 亚洲激情五月| 国产欧美69| 久久国产直播| 日韩精品视频一区二区三区| 久久久久久自在自线| 美女精品在线| 欧美国产专区| 国产精品女主播一区二区三区| 国产精品亚洲二区| 久久国产电影| 91综合久久爱com| 亚洲高清激情| 老司机精品在线| 亚洲一区二区三区高清| 精品免费视频| 亚洲伊人精品酒店| av资源亚洲| 亚洲精品人人| 久久中文字幕二区| 国产精品xxx在线观看| 欧美日韩三区| 精品美女视频 | 日本中文字幕视频一区| 亚洲天堂av影院| 奇米777国产一区国产二区| 播放一区二区| 美女视频黄 久久| 免费观看久久久4p| 最新中文字幕在线播放 | 久久在线91| 一区二区日韩免费看| 欧美一级鲁丝片| 国产精品视频首页| 在线观看视频免费一区二区三区| 麻豆视频在线看| 日韩av网站在线观看| 一区二区自拍| 亚洲啊v在线| 欧美国产中文高清| 日本在线视频一区二区| 国户精品久久久久久久久久久不卡| 国产精品xxxav免费视频| 亚洲一区二区免费在线观看| 欧洲亚洲一区二区三区| 精品资源在线| 国产精品三级| 人人精品久久| 日韩中文字幕麻豆| 欧美日韩国产探花| 神马日本精品| 久久精品网址| 国产欧美日韩精品一区二区三区| 一二三区精品| 9色精品在线| 亚洲二区视频| 亚洲www啪成人一区二区| 成人午夜毛片| 久久精品资源| 国产精品乱战久久久| 日韩动漫一区| 日本成人在线一区| 日韩精品一区二区三区中文字幕| 午夜一级久久| 视频在线在亚洲| 久热精品在线| 亚洲一区国产一区| 亚洲一区日本| 久久亚洲不卡| 综合一区av| 日韩精品欧美大片| 日韩精品第二页| 欧美日韩精品一区二区三区视频 | 亚洲啊v在线| 波多视频一区| 91日韩在线| 91日韩欧美| 国产色播av在线| 日韩电影免费网站| 欧美13videosex性极品| 国产不卡精品在线| 中文在线中文资源| 欧美精品日日操| 成人看片网站| 亚洲欧美伊人| 天堂成人国产精品一区| 日韩精品一区第一页| 丝袜美腿成人在线| 综合五月婷婷| 欧美久久一区二区三区| 91亚洲精品视频在线观看| 欧美一区成人| 久久久久九九精品影院| 国产一区二区三区精品在线观看| 精品国产乱码久久久久久1区2匹| 国产一区一一区高清不卡| 97精品中文字幕| 欧美aa在线观看| 免费不卡中文字幕在线| 香蕉视频成人在线观看| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 日韩毛片视频| 久久精品亚洲人成影院| 婷婷激情综合| 亚洲欧洲免费| 国产精品15p| 快播电影网址老女人久久| 亚洲精品国产偷自在线观看| 蜜桃一区二区三区在线| 日韩av成人高清| 精品一区二区三区四区五区| 日韩电影免费在线观看| 黑丝一区二区三区| 日韩欧美在线精品| 久久精品国产久精国产爱| 日本不卡免费高清视频在线| 婷婷亚洲五月色综合| 四虎精品一区二区免费| 欧美极品中文字幕| 久久国产主播| 中文精品电影| 精品国产中文字幕第一页| 性欧美xxxx免费岛国不卡电影| 亚洲欧美日本日韩| 国产精品久久久久9999高清| 日韩不卡免费高清视频| 蜜臀久久久久久久| 国产精品22p| 午夜日韩福利| 国产精品久久久久久久久久妞妞| 成人亚洲欧美| 蜜桃传媒麻豆第一区在线观看| 久久激情五月激情| 成人日韩在线观看| 日本亚洲不卡| 欧美日韩尤物久久| 日本99精品| 亚洲成人二区| 国产亚洲精品美女久久| 久久美女性网| 青青草国产精品亚洲专区无| 日韩欧美精品综合| 日韩综合一区二区| 日韩在线不卡| 91精品美女| 久久久久中文| 久久狠狠久久| 黄色不卡一区| 免费视频一区二区三区在线观看| 不卡视频在线| 精品国产鲁一鲁****| 中文精品电影| 久久久夜精品| 国产精品激情| 久久都是精品| 国产理论在线| 欧美日韩精品一区二区三区视频 | 国产日韩欧美一区二区三区|