有多少語言在提刀想反超 Java的路上?但萬萬沒想到,人家并未當回事,如今這款常青藤甚至越跑越歡,當我們還在使用 Java 7/8 時,它已經一路跑到了 11。
和預期的時間差不多,北京時間 9 月 26 日,Oracle 官方宣布 Java 11(18.9 LTS) 正式發布,可供生產環境中使用,此次版本的更新,不僅提高了工作效率,也提供了HTTP/2ClientAPI。
同時,這也是自 Oracle 宣布以六個月為周期更新后發布的第一個長期支持版本。下載地址如下:
https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html
JDK 11 主要特性
最新發布的 JDK 11 共帶來了 17 項更新:
181:Nest-Based Access Control(基于嵌套的訪問控制)
309:Dynamic Class-File Constants(動態類文件常量)
315:Improve Aarch64 Intrinsics(改進 Aarch64 內部函數)
318:Epsilon: A No-Op Garbage Collector(Epsilon:No-Op 垃圾收集器)
320:Remove the Java EE and CORBA Modules(刪除 Java EE 和 CORBA 模塊)
321:HTTP Client (Standard)(HTTP 客戶端)
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(啟動單文件源代碼程序)
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(棄用 Rhino JavaScript 引擎)
336:Deprecate the Pack200 Tools and API(棄用 Pack200 工具和 API)
從開發者的角度來看,上面的特性中有幾點需要特別關注。
一
JEP 323 實現了 Java 10 中引入的局部變量類型推斷的擴展。類型推斷是從其余源代碼和鍵入規則中推導出的數據類型。這節省了開發者的工作時間,且不會使源代碼過于復雜,而提高了可讀性。
從 Java 10 開始,可以使用關鍵字 var 聲明局部變量,如下所示:
//FunktioniertseitJava10varzahl=5;//intvarstring="HelloWorld";//Stringvarobjekt=BigDecimal.ONE;//BigDecimal
在 Java 11 中,不同點在于開發者可以使用 var 聲明 lambda 參數。乍一看,這一舉措似乎有點多余,因為在寫代碼過程中可以省略 lambda 參數的類型,并通過類型推斷確定它們。但是,擴展名對于使用 @Nonnull 和 @Nullable 等類型注釋很有用。
//InferencevonLambda-ParameternConsumer
二
JDK 11 中另一個亮點在于仍處于實驗階段的新 HTTP Client API 的標準化,該 API 在 JDK 9 中被引入,在 JDK 10 中進行了更新,在本次 JDK 11 中包名由 jdk.incubator.http 改為 java.net.http。HTTP Client API 除了實現了HTTP(1.1和2)、WebSocket,同步和異步調用以及 Reactive Streams 現在也受支持。還使用清晰易懂的 Fluent 界面,將來可能會淘汰其他 HTTP 客戶端(如 Apache)的使用。
HttpClientclient=HttpClient.newHttpClient();HttpRequestrequest=HttpRequest.newBuilder().uri(URI.create("http://openjdk.java.net/")).build();client.sendAsync(request,asString()).thenApply(HttpResponse::body).thenAccept(System.out::println).join();
三
JEP 330(啟動單文件源代碼程序)現在可以啟動尚未編譯的類。如今單文件程序在編寫小實用程序時很常見,特別是腳本語言領域。從中開發者可以省去用 Java 編譯程序等不必要工作,以及減少新手的入門障礙。在基于 Java 10 的程序中可以通過三種方式啟動:
作為* .class文件
作為* .jar文件中的主類
作為模塊中的主類
現在,Java 11 中可以在源代碼文件中聲明類:
#javaHelloWorld.java//statt#javacHelloWorld.java#java-cp.hello.World
在 Unix 操作系統上,Java 文件甚至可以直接作為 Shebang 文件執行:
#!/path/to/java--sourceversion
#./HelloWorld.java
其他值得注意的變化包括支持 Unicode 10 標準以及將 Profiler Flight Recorder 集成到 OpenJDK 中(之前僅適用于 Oracle JDK)。Flight Recorder 的目標是盡可能高效地記錄應用程序數據,以便在出現問題時分析 Java 應用程序和 JVM。
API 的變化
此外,Java 類庫也有不少小的改動。 特別是字符串:
|WelcometoJShell--Version11|Foranintroductiontype:/helpintro//UnicodezuStringjshell>Character.toString(100)$1==>"d"jshell>Character.toString(66)$2==>"B"http://ZeichenmitFaktormultiplizierenjshell>"-".repeat(20)$3==>"--------------------"http://Enth?lteinTextkeineZeichen(h?chstensLeerzeichen)?jshell>Stringmsg="hello"msg==>"hello"jshell>msg.isBlank()$5==>falsejshell>Stringmsg=""msg==>""jshell>msg.isBlank()$7==>true//AbschneidenvonführendenodernachgelagertenLeerzeichenjshell>"helloworld".strip()$8==>"helloworld"jshell>"helloworld".strip()$9==>"helloworld"jshell>"helloworld".stripTrailing()$10==>"helloworld"jshell>"helloworld".stripLeading()$11==>"helloworld"jshell>"".strip()$12==>""http://Textezeilenweiseverarbeitenjshell>Stringcontent="thisisamultilinecontent Mostlyobtainedfromsomefile whichwewillbreakintolines usingthenewapi"content==>"thisisamultilinecontent Mostlyobtainedfro...ines usingthenewapi"jshell>content.lines().forEach(System.out::println)thisisamultilinecontentMostlyobtainedfromsomefilewhichwewillbreakintolinesusingthenewapi
Java 11 計劃于本月,即 9 月 25 日發布。與 Java 10 不同,Java 11 不僅提供了長期支持,還將作為 Java 平臺的參考實現。新的長期支持版本每三年發布一次,根據后續的發布計劃,Java 17 將于 2021 年發布。
Java 11:刪除了什么?
Oracle JDK 將不再包含 JavaFX(OpenJDK 從未提供過)。相反,JavaFX 通過 OpenJFX 作為單獨的下載提供,并且可以像任何 Java 應用程序中的任何其他庫一樣使用。除 JavaFX 外,還將停止對 Applet 和 Java Web Start 的支持。如果仍然想使用 Java Web Start,那么必須保持在 JDK 8 的版本,直至 Oracle 停止免費更新后,花錢購買該服務。
另一個在 Java 11 中被棄用的 JavaScript 引擎 Rhino。預計它將在 Java 的未來版本中徹底消失。不過值得注意的是,Rhino 從未真正將自己斷言為 Node.js 上的服務器端 JavaScript 實現基礎。通過 GraalVM,Oracle 現在采用其他方式在 JVM 上本地運行其他編程語言。
順便說一下,從 Java 11 開始,Java 運行時環境(JRE)將僅存在于服務器版本中,而不再存在于桌面中。但是,對于具有模塊系統和 jlink 工具的桌面應用程序,開發者現在可以輕松創建或調整運行時環境。
JDK 11 是否值得更新?
今年四月,Oracle 發布官方聲明表示即將停止對 JDK 8 的正常支持(免費更新):
2019 年 1 月之后,Oracle 將不會在其網站上發布 Java SE 8 商業使用的進一步更新下載。如需持續獲取安全的 Bug 修復和安全補丁以及 Java SE 8 或以前版本的穩定性支持,可以通過 Oracle Java SE 高級版、Oracle Java SE 高級桌面、或 Oracle Java SE 套件。
這意味著,在 2019 年 1 月之后,開發者想要使用老版本只能付費了,從中也側面看出,Oracle 在間接性鼓勵用戶主動升級。不過,據各種對 Java 用戶調查如 Jaxenter發現,大多數的開發者依舊停留在 Java 8 以內的版本。
其實,這也不足為怪,當開發者剛開始吐槽新版本帶來的問題時,Java 已搭載上了火箭更新到了下一版本,讓大家措手不及。此前,就連Java Collection Framework 的創建者 Josh Bloch 都在吐槽Java 9 模塊系統(Project Jigsaw)帶來令人頭痛的問題,甚至建議:
現在說Project Jigsaw將在 JDK 之外實現廣泛使用還為時過早。與此同時,除非你有迫切需要,否則最好避免使用它們。
那么對于 JDK 11 是否值得立即更新使用?按照 Oracle 公布支持的路線圖來看,如文章開頭所述,Java 11 將會獲得 Oracle 長期的服務支持,直至 2026 年 9 月。相比 Java 9 和 10 這兩個僅提供半年技術支持的版本來說,JDK 11 的發布無疑對個人開發者以及企業都是一件好事。
那么,再結合其新特性,你會選擇更新到 JDK 11 嗎?
-
JAVA
+關注
關注
20文章
2984瀏覽量
106903 -
Oracle
+關注
關注
2文章
299瀏覽量
35818
原文標題:Java 11 正式發布!
文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
LTS7428TE/LTS7428TK N溝道增強型功率MOSFET規格書
英偉達GTC2025亮點:Oracle與NVIDIA合作助力企業加速代理式AI推理

Oracle 與 NVIDIA 合作助力企業加速代理式 AI 推理

LTS4008TE/LTS4008TK N溝道增強型功率MOSFET數據表
適用于Oracle的Devart Excel插件:輕松管理數據

Java 23功能介紹

中軟國際參加openEuler 24.03 LTS版本發布會
Oracle與亞馬遜云科技宣布建立戰略合作伙伴關系
Oracle數據恢復—異常斷電后Oracle數據庫啟庫報錯的數據恢復案例

評論