JavaRush /Java Blog /Random-TW /您從未聽過的 10 個 Java 8 功能。

您從未聽過的 10 個 Java 8 功能。

在 Random-TW 群組發布
拉姆達,拉姆達,拉姆達。當人們談論 Java 8 時,您所聽到的就是這些。但這只是一部分。Java 8 有許多新功能 - 一些強大的新類別和慣用語,還有一些從一開始就應該存在的東西。我想繼續討論十個新功能,我認為它們是絕對值得了解的小寶石。其中肯定至少有一兩個您想嘗試,所以讓我們開始吧! 1) 預設方法。 Java 語言中的新增功能,您現在可以為介面新增方法體( 預設方法)。這些方法無條件地加入所有實作這些介面的類別中。這使您有機會為現有庫添加新功能,而無需破壞舊程式碼。這絕對是一個優點。另一方面,它嚴重模糊了介面和遵循這些條件的類別(作為其私有實現)之間的界限,介面要求遵循某些條件作為約定。對於(右)右手來說,這可能是一種使介面更聰明、避免重複和擴展庫的優雅方式。落入壞人手中;我們很快就會在介面中看到呼叫它並將其轉換為具體類型的方法。Brrr.... 2) 停止進程。 啟動一個額外的進程是你做的事情之一,你半知半解地知道當進程(崩潰)(崩潰)中止、(掛起)掛起或使用100% 的CPU 時你會回來(調試)調試它。Process 類別現在配備了兩種新方法來幫助您控制不規則的進程。第一個 isAlive()允許您輕鬆檢查進程是否正在運行,而無需等待它。第二個也是更強大的(警告!)是 destroyForcously(),它允許您(無恥地)強行(殺死)停止超過其時間(等待或其他)或不再需要的進程。 3)沖壓鎖。 現在來一些真正令人興奮的事情。沒有人喜歡同步代碼。這肯定會降低應用程式的效能(尤其是大規模),或更糟的是,導致應用程式凍結。然而,有時候你就是別無選擇。有許多用於同步多執行緒資源存取的習慣用法。最優選的之一是 ReadWriteLock 和相關實作。此習慣用法允許多個執行緒使用資源,同時僅阻止操作該資源的線程,從而減少爭用。聽起來不錯,但實際上這個鎖太慢了 尤其是在有大量寫入線程的情況下。事實證明,這種情況非常糟糕,以至於 Java 8 引入了新的 RWLock,稱為 StampedLock。這種鎖不僅速度更快,而且還提供了強大的樂觀鎖API,可以以較低的成本獲得讀鎖,希望在程式碼的關鍵部分不會發生寫入操作。在該部分的末尾,您詢問鎖在那段時間內是否發生了記錄,在這種情況下您可以決定是否重試、升級鎖或放棄。這把鎖是一個強大的工具,值得專門寫一篇文章來介紹它。我對這個新玩具感到非常興奮。偉大的!此外,您還可以閱讀 這裡4) 競爭記錄者。 對於運行多線程應用程式的人來說,這是另一個小寶石。一個簡單且有效率的 新 API,用於從多個執行緒讀取和寫入計數器。有時,它甚至比使用 AtomicIntegers 更快。太棒了! 5) 可選(或可選)值。 哦,空指針,讓所有Java開發者頭痛的問題。也許是所有例外中最受歡迎的,它從很早的時候就已經存在了。至少從 1965年開始。借用 Scala 和 Haskell,Java 8 有一個新模式,稱為“Optional”,用於包裝可以為 null 的參考。這絕不是消除 null 的靈丹妙藥,而是 API 設計者在程式碼層級(而不是文件)指示可以傳回 null 值或將 null 值傳遞給方法的一種方法,並且呼叫者必須做好準備。因此,這僅適用於新 API,前提是呼叫者不允許引用從包裝器中逃逸,否則可能會不安全地取消引用。我不得不說我對這個功能很矛盾。一方面,空值仍然是一個大問題,所以我很感謝為解決這個問題所做的一切。另一方面,我非常懷疑這是否會成功。這是因為使用Optional需要整個公司的持續努力,並且沒有什麼立即的效果。如果沒有強而有力的執法,它很可能會停留在道路的左側。 閱讀有關可選的更多資訊6)註釋一切。 Java 語言的另一個小進步是:註解幾乎 可以加入程式碼中的所有內容。以前,註釋只能加入到類別或方法聲明等內容中。從 Java 8 開始,在將值轉換為特定類型,甚至指派新物件時,可以將註解新增至變數和參數宣告。這是集中努力的一部分(以及對 JavaDoc 工具和 API 的改進),以使該語言對靜態分析和測量工具(例如 FindBugs)更加友善。這是一個很好的功能,但就像Java 7 中引入的 invokeDynamic一樣,它的真正價值將取決於社會如何使用它。 7) 溢出操作。 現在,這是 一組方法,從第一天起它就應該是核心庫的一部分。我最喜歡的愛好是當整數超過 2^32 時調試數字溢出,並繼續創建最令人討厭和最意想不到的錯誤(即“我到底是如何得到這個奇怪的值的?”)。再說一次,這裡沒有什麼靈丹妙藥,但是有很多函數可以處理數字,當它們溢出時,它們會以比標準 +/* 運算符更不寬容的方式拋出,而標準 +/* 運算符會無條件溢出。 8) 瀏覽目錄。 遍歷目錄樹的內容長期以來一直是人們在 Google 上搜尋的內容之一(在這種情況下,可能會建議您使用 Apache.FileUtils)。Java 8 透過十個新方法對 Files類別進行了改版。我最喜歡的是 walk(),它創造一個惰性線程(對於大型檔案系統很重要)來迭代目錄結構的內容。 9)強隨機生成。 如今,關於密碼和密鑰的脆弱性的討論並不缺乏。軟體安全是一項複雜的業務並且容易出錯。這就是為什麼我喜歡新的 SecureRandom 方法。 getinstanceStrong(),它會自動選擇可用於 Java 虛擬機器的最強隨機產生器。這減少了您失敗或產生器較弱的機會,這將使金鑰和加密值更容易受到駭客攻擊。 10.Date.toInstant()。 Java 8 引進了一個全新 的日期和時間 API。這是可以理解的,因為現有的不是很好。多年來,Joda 本質上一直致力於使用 Java API 來處理日期和時間。然而,即使使用新的 API,仍然存在一個大問題 - 存在大量使用舊 API 的程式碼和程式庫。我們都知道他們會留在這裡。那你會怎麼做?為了實現這一點,Java 8 做了一些相當優雅的事情,為 Date 類別添加了一個名為 toInstant()的新方法,將其轉換為新的 API。這使您可以快速跳到新的 API,即使在使用使用舊日期 API 的程式碼時也是如此(並且在可預見的未來將繼續這樣做)。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION