Java 11新特性解读
概述
美國當地時間9月25日,Oracle 官方宣布 Java 11 (18.9 LTS) 正式發布,可在生產環境中使用!這是自 Java 8 后的首個長期支持版本,將支持到2026年,可以使用下面的地址進行下載:
https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html
版本更新說明
在Java的版本上,按照官方的說法,Java 的版本發布周期變更為每六個月一次 —— 每半年發布一個大版本,每個季度發布一個中間特性版本,并且承諾不會跳票。通過這樣的方式,開發團隊可以把一些關鍵特性盡早合并到 JDK 之中,以快速得到開發者反饋,在一定程度上避免出現像 Java 9 這樣兩次被迫延遲發布的窘況。
按照官方的說法,新的發布周期會嚴格遵循時間點,將于每年的3月份和9月份發布。所以 Java 11 的版本號是 18.9(LTS)。不過與 Java 9 和 Java 10 這兩個被稱為“功能性的版本”不同(兩者均只提供半年的技術支持),Java 11 不僅提供了長期支持服務,還將作為 Java 平臺的參考實現。Oracle 直到2023年9月都會為 Java 11 提供技術支持,而補丁和安全警告等擴展支持將持續到2026年。
許可證
按照官方的說法,從 Java 11 開始,Oracle 將在 GPLv2 許可證下提供 JDK 版本,采用 Classpath Exception (GPLv2+CPE) 的方式,滿足了在商業許可下使用 Oracle JDK 作為 Oracle 產品或服務的一部分,或者不想使用開源軟件的需求。這種使用開源許可證和商業許可證的組合取代了歷史上的“BCL”許可證,該許可證具有免費和付費商業條款的組合。
新特性
根據官網的公開信息,此處的Java 11主要更新了 17 個 JEP。
181: Nest-Based Access Control(基于嵌套的訪問控制)
309: Dynamic Class-File Constants(動態的類文件常量)
315: Improve Aarch64 Intrinsics(改進 Aarch64 Intrinsics)
318: Epsilon: A No-Op Garbage Collector(Epsilon 垃圾回收器,又被稱為"No-Op(無操作)"回收器)
320: Remove the Java EE and CORBA Modules(移除 Java EE 和 CORBA 模塊,JavaFX 也已被移除)
321: HTTP Client (Standard)
323: Local-Variable Syntax for Lambda Parameters(用于 Lambda 參數的局部變量語法)
324: Key Agreement with Curve25519 and Curve448(采用 Curve25519 和 Curve448 算法實現的密鑰協議)
327: Unicode 10
328: Flight Recorder(飛行記錄儀)
329: ChaCha20 and Poly1305 Cryptographic Algorithms(實現 ChaCha20 和 Poly1305 加密算法)
330: Launch Single-File Source-Code Programs(啟動單個 Java 源代碼文件的程序)
331: Low-Overhead Heap Profiling(低開銷的堆分配采樣方法)
332: Transport Layer Security (TLS) 1.3(對 TLS 1.3 的支持)
333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)(ZGC:可伸縮的低延遲垃圾回收器,處于實驗性階段)
335: Deprecate the Nashorn JavaScript Engine(棄用 Nashorn JavaScript 引擎)
336: Deprecate the Pack200 Tools and API(棄用 Pack200 工具及其 API)
新特性體驗
那么,作為一名Java程序猿,Java 11究竟帶來了哪些改變呢,對于我們寫代碼會有什么幫助呢?
1,在Lambda表達式中使用var
本地變量類型var是java 10提出的新概念,它可以從上下文中推斷出本地變量的類型,從而提高代碼可讀性。
public?class?Main?{????public?static?void?main(String[]?args)?throws?Exception?{????????URL?url?=?new?URL("http://www.oracle.com/");????????URLConnection?conn?=?url.openConnection();????????Reader?reader?=?new?BufferedReader(????????????????new?InputStreamReader(conn.getInputStream()));????}}使用var聲明后,上面的代碼可以改寫成:
public?class?Main?{????public?static?void?main(String[]?args)?throws?Exception?{????????var?url?=?new?URL("http://www.oracle.com/");????????var?conn?=?url.openConnection();????????var?reader?=?new?BufferedReader(????????????????new?InputStreamReader(conn.getInputStream()));????}}在上面的代碼中,我們使用var代替了URL、URLConnection、Reader,提高了代碼的可讀性,也方便了開發。 但是在JAVA 10中,var變量不能在lambda表達式中聲明,在JAVA 11中,解決了這個問題?,F在,我們可以在lambda表達式中使用var,例如:
(var?x,?var?y)?->?x.process(y)//等價于(x,?y)?->?x.process(y)2,標準化的HTTP Client API
以前我們在程序中使用HttpClient時,通常會引入apache的HttpClient工具包。現在,我們可以使用JDK原生的 HttpClient。
public class HttpTest {
? ?public static void main(String[] args) throws Exception {
? ? ? ?String uri = "http://www.oracle.com/";
? ? ? ?HttpClient client = HttpClient.newHttpClient();
? ? ? ?HttpRequest request = HttpRequest.newBuilder()
? ? ? ? ? ? ? ?.uri(URI.create(uri))
? ? ? ? ? ? ? ?.build();
? ? ? ?HttpResponse<String> response =
? ? ? ? ? ? ? ?client.send(request, HttpResponse.BodyHandlers.ofString());
? ? ? ?System.out.println(response.body());
? ?}
}
上面的例子是同步的get請求,還有其他的方法HttpClient也是提供的,例如:異步get、post提交、并發請求、Get Json和Post Json等。更多資料請查看附件的鏈接:
JDK 11 發布說明
https://www.oracle.com/technetwork/java/javase/11u-relnotes-5093844.html
JDK 11 官方文檔
https://docs.oracle.com/en/java/javase/11/
JDK 11 新特性
https://www.oracle.com/technetwork/java/javase/11-relnote-issues-5012449.html#NewFeature
轉載于:https://blog.51cto.com/13883927/2339000
總結
以上是生活随笔為你收集整理的Java 11新特性解读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx后端节点健康检查
- 下一篇: LFS 8.3 中文翻译版本发布!