Java 8 發(fā)布已經(jīng)三年多了,,下一個版本現(xiàn)在已經(jīng)整裝待發(fā)了,,暫定發(fā)布日期是2017年9月21日。 你也許已經(jīng)聽到 Java 9 的模塊化系統(tǒng),,不過,,新版本中還有更多新功能特性。在這篇博客里,,我們將試圖介紹其中的一部分,。 你可以從 http://jdk9./download/ 下載 JDK 9 的 EA(早期體驗版),。 好了,,不要再浪費時間了,我們開始介紹吧,! Java 9 REPL(JShell) Oracle 介紹過一個名為“JShell”的新工具,。它表示 Java Shell,是大家熟知的 REPL (讀取-執(zhí)行-打印-循環(huán)) 形式,。它用于執(zhí)行和測試 Java 的語言結(jié)構(gòu),,比如類、接口,、枚舉,、對象、語句等,,非常簡單,。很多語言都實現(xiàn)了讀取-執(zhí)行-打開-循環(huán)的交互形式,,現(xiàn)在 Java 也是其中一員了。REPL/JShell 看起來像這樣: 不需要 `public static void main(String[] args)`,??岚桑?/span> HTTP 2.0 客戶端 Java 9 會完全支持 HTTP 2.0 并帶來新的 HTTP 客戶端,,它會代替 HttpURLConnection —— 同時還會實現(xiàn) HTTP 2.0 和 Web Socket,。 新的 API 在 .http 包中。 這個 API 使用創(chuàng)建者(Builder)模式,,這使得它真正易用: Java 9 模塊 (Jigsaw 項目) Java 9 特性的大變動之一是模塊系統(tǒng),。Oracle 把它作為 Jigsaw 項目的一部分。
它們的主要目標(biāo)之一是提供模塊化的 JVM,,使之可以在內(nèi)存有限的設(shè)備上運行,。JVM 可以只運行那些應(yīng)用程序需要的模塊和 API。 模塊系統(tǒng)看起來有點像: 模塊化的 JAR 文件包含一個額外的模塊描述符,。在這個模塊描述符中,,通過`requires` 語句表示對其它模塊的依賴。 此外,,`exports` 語句控制哪些包可以被其它模塊訪問,。 你可以在這里了解更多關(guān)于 Jigsaw 的信息。 改進(jìn)的進(jìn)程 API Java SE 9 帶來一些進(jìn)程 API 的改進(jìn),。它們添加了一些新的類和方法,,來簡化控制和管理 OS 進(jìn)程。 進(jìn)程 API 中的兩個新接口:
這一更新可以擴展 Java 與操作系統(tǒng)交互的能力:新的定位方法用于處理 PID,,進(jìn)程名稱和狀態(tài),,并可以枚舉 JVM、進(jìn)程等,。比如,,在 Linux 中檢索 PID 的代碼會像這樣: 輕量級的 JSON API Java 9 帶來一個輕量級的 API,用于通過 JSON(JavaScriopt 對象符號) 數(shù)據(jù)交換格式處理和生成文件以及數(shù)據(jù)流,,JSON 是基于 JavaScript 的子集,,用來代替 XML。 這個 API 的主要目標(biāo)如下:
預(yù)計 JEP 會把它作為 java.util 的子包交付,,至少包含 4 個模塊:事件、流,、樹和生成器,。預(yù)期不會修改現(xiàn)有的模塊、包或類,。預(yù)計 JSON API 不會依賴 Java 基礎(chǔ)模塊之外的模塊,。 智能 Java 編譯 (第 2 階段) 智能 Java 編譯項目指在改進(jìn) sjavac (Java 編程語言編輯器) 工具,使它能默認(rèn)用于 JDK 構(gòu)建,,并普遍用于其它 JDK 之外的大項目構(gòu)建,。 由于穩(wěn)定性和便捷性相關(guān)的各種問題,sjavac 并未默認(rèn)用于 JDK 構(gòu)建腳本,。這一 JEP 的首要目標(biāo)是解決這些問題,。這需要確保這一工具在所有軟件/硬件配置上產(chǎn)生可靠的結(jié)果。 總體目錄是提升 sjavac 的質(zhì)量,,使它可以像常規(guī)的 javac 封裝那樣能夠編譯任何大型 Java 項目,。 私有接口方法 從 Java 8 開始可以在接口中實現(xiàn)默認(rèn)方法和靜態(tài)方法。然后我們不能在接口中創(chuàng)建私有方法,。 為了避免冗余代碼并提高可重用性,,Oracle 計劃在 Java SE 9 的接口中引入私有方法。從 Java SE 9 開始可以在接口中使用 ‘private’ 關(guān)鍵字寫私有方法和私有靜態(tài)方法了,。 私有方法可以是靜態(tài)的,,這樣它屬于接口。非靜態(tài)的私有方法可以由實現(xiàn)接口的實例調(diào)用,,但只能是在接口中,。 如果你使用默認(rèn)方法開發(fā) API,那么私有方法在代碼結(jié)構(gòu)方面對其實現(xiàn)會很有幫助,。 響應(yīng)式流 最近,,響應(yīng)式編程由于其帶來的好處,在應(yīng)用程序開發(fā)中非常流行,。Scala、Play,、Akka 等都已經(jīng)整合了響應(yīng)流,,受益匪淺。Oracle 也在 Java SE 9 中引入了響應(yīng)式流的 API,。 java.util.concurrent.Flow 類封裝了以下四個接口:
這些接口支持響應(yīng)式流的發(fā)布-訂閱框架,。Java 9 還支持一個工具類:SubmissionPublisher,。發(fā)布者產(chǎn)生若干事項由訂閱者消費。而訂閱者通過訂閱進(jìn)行管理,。訂閱連接了發(fā)布者和訂閱者,。 多分辨率圖像 API 在 Java SE 9 中,Oracle 會引入新的多分辨率圖像API,。MultiResolutionImage 是這個 API 的重要接口,。 MultiResolutionImage 封裝一組不同高度和寬度和圖像(也就是不同分辨率)并允許我們根據(jù)自己的需要進(jìn)行查詢。 簡單地說,,這個新的 API 允許把一組不同分辨率(寬度和高度)的圖像封裝到一個圖像中,。 新的 API 定義在 java.awt.image 包中,可以幫助我們:
Java 9 提供的 MultiResolutionImage 接口有兩個重要的方法:
除了這些功能,,還有一些隨 Java 9 發(fā)布的特性/改進(jìn),,比如:
該說的都說了,所有這些功能都計劃加入 Java 9 更新,,但我們并不能保證它們一定會隨 Java 發(fā)布,。所以,對 Java 9 拭目以待,。 更多干貨請前往公眾號菜單欄“讀我”->“干貨分享”查看,。 |
|