總結一下Java 八、九、10 的新特性

Java8 新增一些新特性,主要總結爲如下幾個:javascript

Lambda 表達式:Lambda容許把函數做爲一個方法的參數(函數做爲參數傳遞進方法中。html

方法引用 − 方法引用提供了很是有用的語法,能夠直接引用已有Java類或對象(實例)的方法或構造器。與lambda聯合使用,方法引用可使語言的構造更緊湊簡潔,減小冗餘代碼。java

默認方法 − 默認方法就是一個在接口裏面有了一個實現的方法。編程

新工具 − 新的編譯工具,如:Nashorn引擎 jjs、 類依賴分析器jdeps。bootstrap

Stream API −新添加的Stream API(java.util.stream) 把真正的函數式編程風格引入到Java中。安全

Date Time API − 增強對日期與時間的處理。服務器

Optional 類 − Optional 類已經成爲 Java 8 類庫的一部分,用來解決空指針異常。異步

Nashorn, JavaScript 引擎 − Java 8提供了一個新的Nashorn javascript引擎,它容許咱們在JVM上運行特定的javascript應用。函數式編程

 

Java 9 新特性:函數

模塊系統:模塊是一個包的容器,Java 9 最大的變化之一是引入了模塊系統(Jigsaw 項目)。

REPL (JShell):交互式編程環境。

HTTP 2 客戶端:HTTP/2標準是HTTP協議的最新版本,新的 HTTPClient API 支持 WebSocket 和 HTTP2 流以及服務器推送特性。

改進的 Javadoc:Javadoc 如今支持在 API 文檔中的進行搜索。另外,Javadoc 的輸出如今符合兼容 HTML5 標準。

多版本兼容 JAR 包:多版本兼容 JAR 功能能讓你建立僅在特定版本的 Java 環境中運行庫程序時選擇使用的 class 版本。

集合工廠方法:List,Set 和 Map 接口中,新的靜態工廠方法能夠建立這些集合的不可變實例。

私有接口方法:在接口中使用private私有方法。咱們可使用 private 訪問修飾符在接口中編寫私有方法。

進程 API: 改進的 API 來控制和管理操做系統進程。引進 java.lang.ProcessHandle 及其嵌套接口 Info 來讓開發者逃離時常由於要獲取一個本地進程的 PID 而不得不使用本地代碼的窘境。

改進的 Stream API:改進的 Stream API 添加了一些便利的方法,使流處理更容易,並使用收集器編寫複雜的查詢。

改進 try-with-resources:若是你已經有一個資源是 final 或等效於 final 變量,您能夠在 try-with-resources 語句中使用該變量,而無需在 try-with-resources 語句中聲明一個新變量。

改進的棄用註解 @Deprecated:註解 @Deprecated 能夠標記 Java API 狀態,能夠表示被標記的 API 將會被移除,或者已經破壞。

改進鑽石操做符(Diamond Operator) :匿名類可使用鑽石操做符(Diamond Operator)。

改進 Optional 類:java.util.Optional 添加了不少新的有用方法,Optional 能夠直接轉爲 stream。

多分辨率圖像 API:定義多分辨率圖像API,開發者能夠很容易的操做和展現不一樣分辨率的圖像了。

改進的 CompletableFuture API : CompletableFuture 類的異步機制能夠在 ProcessHandle.onExit 方法退出時執行操做。

輕量級的 JSON API:內置了一個輕量級的JSON API

響應式流(Reactive Streams) API: Java 9中引入了新的響應式流 API 來支持 Java 9 中的響應式編程。

 

Java10中12項關鍵新特性:

局部變量的類型推斷:Java開始引用像腳本語言JavaScript中的var類型(弱類型),容許你經過var定義任何類型的變量。 

應用類數據共享(CDS):CDS 在 JDK5 時被引進以改善 JVM 啓動的表現,同時減小當多個虛擬機在同一個物理或虛擬的機器上運行時的資源佔用。JDK10 將擴展 CDS 到容許內部系統的類加載器、內部平臺的類加載器和自定義類加載器來加載得到的類。以前,CDS 的使用僅僅限制在了 bootstrap 的類加載器。

額外的 Unicode 語言標籤擴展:這將改善 java.util.Locale 類和相關的 API 以實現額外 BCP47 語言標籤的 Unicode 擴展。尤爲是,貨幣類型,一週的第一天,區域覆蓋和時區等標籤如今將被支持。

根證書:在 JDK 中將提供一套默認的 CA 根證書。關鍵的安所有件,如 TLS ,在 OpenJDK 構建中將默認有效。這是 Oracle 正在努力確保 OpenJDK 二進制和 Oracle JDK 二進制功能上同樣的工做的一部分,是一項有用的補充內容。

並行全垃圾回收器 G1:G1 是設計來做爲一種低延時的垃圾回收器(可是若是它跟不上舊的堆碎片產生的提高速率的話,將仍然採用完整壓縮集合)。在 JDK9 以前,默認的收集器是並行,吞吐,收集器。爲了減小在使用默認的收集器的應用性能配置文件的差別,G1 如今有一個並行完整收集機制。

移除 Native-Header 自動生成工具:Java9 開始了一些對 JDK 的家務管理,這項特性是對它的延續。當編譯 JNI 代碼時,已再也不須要單獨的工具來生成頭文件,由於這能夠經過 javac 完成。在將來的某一時刻,JNI 將會被 Panama 項目的結果取代,可是什麼時候發生還不清楚。

垃圾回收器接口:這不是讓開發者用來控制垃圾回收的接口;而是一個在 JVM 源代碼中的容許另外的垃圾回收器快速方便的集成的接口。

線程-局部變量管控:這是在 JVM 內部至關低級別的更改,如今將容許在不運行全局虛擬機安全點的狀況下實現線程回調。這將使得中止單個線程變得可能和便宜,而不是隻能啓用或中止全部線程。

在備用存儲裝置上的堆分配: 硬件技術在持續進化,如今可使用與傳統 DRAM 具備相同接口和相似性能特色的非易失性 RAM 。這項 JEP 將使得 JVM 可以使用適用於不一樣類型的存儲機制的堆。

試驗性的基於 Java 的 JIT 編譯器:最近宣佈的 Metropolis 項目,提議用 Java 重寫大部分 JVM 。乍一想,以爲很奇怪。若是 JVM 是用 Java 編寫的,那麼是否須要一個 JVM 來運行 JVM ? 相應的,這致使了一個很好的鏡像類比。 現實狀況是,使用 Java 編寫 JVM 並不意味着必須將其編譯爲字節碼,你可使用 AOT 編譯,而後在運行時編譯代碼以提升性能。這項 JEP 將 Graal 編譯器研究項目引入到 JDK 中。並給將 Metropolis 項目成爲現實,使 JVM 性能與當前 C++ 所寫版本匹敵(或有幸超越)提供基礎。

合併 JDK 多個代碼倉庫到一個單獨的儲存庫中: 在 JDK9 中,有 8 個倉庫: root、corba、hotspot、jaxp、jaxws、jdk、langtools 和 nashorn 。在 JDK10 中這些將被合併爲一個,使得跨相互依賴的變動集的存儲庫運行 atomic commit (原子提交)成爲可能。

 

文章出處:(http://www.runoob.com/java/java8-new-features.html      http://www.runoob.com/java/java9-new-features.html      https://www.cnblogs.com/skychenjiajun/p/8875456.html)

<本文如有侵權,請聯繫我,馬上刪去>

相關文章
相關標籤/搜索