JDK各版本新特性總結

JDK各版本新特性總結
 
JDK 1.7 新特性 
 
1.switch中可使用string字符串了
2.<>的運用,
List<String> tempList = new ArrayList<>();
即泛型實例化類型自動推斷
3.語法上支持集合,而不必定是數組
final List<Integer> piDigits = [ 1,2,3,4,5,8 ];   
對Java集合(Collections)的加強支持,摒棄了Java集合接口的實現類,如:ArrayList、HashSet和HashMap。而是直接採用[]、{}的形式存入對象,採用[]的形式按照索引、鍵值來獲取集合中的對象
4.新增一些取環境信息的工具方法
File System.getJavaIoTempDir() // IO臨時文件夾
File System.getJavaHomeDir() // JRE的安裝目錄
File System.getUserHomeDir() // 當前用戶目錄
File System.getUserDir() // 啓動java進程時所在的目錄
5.Boolean類型反轉,空指針安全,參與位運算
6.數值可加下劃線,支持將整數類型用 二進制來表示,用0b開頭
int one_million = 1_000_000;
int binary = 0b1001_1001;
 7.簡化了可變參數方法的調用
當程序員試圖使用一個不可具體化的可變參數並調用一個*varargs* (可變)方法時,編輯器會生成一個「非安全操做」的警告。
八、在try catch異常撲捉中,一個catch能夠寫多個異常類型,用"|"隔開,
 
 JDK 1.8 新特性 
 
ava8是一個新的里程碑,帶來了史無前例的諸多特性,lambda表達式,Stream API,新的Date time api,多核併發支持,重大安全問題改進等
1、接口的默認方法
Java 8容許咱們給接口添加一個非抽象的方法實現,只須要使用 default關鍵字便可,這個特徵又叫作擴展方法。
2、Lambda 表達式
在Java 8 中你就不必使用這種傳統的匿名對象的方式了,Java 8提供了更簡潔的語法,lambda表達式:
Collections.sort(names, (String a, String b) -> {
return b.compareTo(a);
});
3、函數式接口
Lambda表達式是如何在java的類型系統中表示的呢?每個lambda表達式都對應一個類型,一般是接口類型。而「函數式接口」是指僅僅只包含一個抽象方法的接口,每個該類型的lambda表達式都會被匹配到這個抽象方法。由於 默認方法 不算抽象方法,因此你也能夠給你的函數式接口添加默認方法。
4、方法與構造函數引用
Java 8 容許你使用 :: 關鍵字來傳遞方法或者構造函數引用,上面的代碼展現瞭如何引用一個靜態方法,咱們也能夠引用一個對象的方法:
converter = something::startsWith;
String converted = converter.convert("Java");
System.out.println(converted);
5、Lambda 做用域
在lambda表達式中訪問外層做用域和老版本的匿名對象中的方式很類似。你能夠直接訪問標記了final的外層局部變量,或者實例的字段以及靜態變量。
6、訪問局部變量
能夠直接在lambda表達式中訪問外層的局部變量:
7、訪問對象字段與靜態變量
和本地變量不一樣的是,lambda內部對於實例的字段以及靜態變量是便可讀又可寫。該行爲和匿名對象是一致的:
8、訪問接口的默認方法
JDK 1.8 API包含了不少內建的函數式接口,在老Java中經常使用到的好比Comparator或者Runnable接口,這些接口都增長了@FunctionalInterface註解以便能用在lambda上。
Java 8 API一樣還提供了不少全新的函數式接口來讓工做更加方便,有一些接口是來自Google Guava庫裏的,即使你對這些很熟悉了,仍是有必要看看這些是如何擴展到lambda上使用的。
 
 JDK 1.9新特性 
1. Jigsaw 項目;模塊化源碼
2. 簡化進程API 
3. 輕量級 JSON API 
4. 錢和貨幣的API 
5. 改善鎖爭用機制
6. 代碼分段緩存
7. 智能Java編譯, 第二階段
8. HTTP 2.0客戶端
9. Kulla計劃: Java的REPL實現
 
一、 Jigsaw 項目:模塊化JDK源碼
Jigsaw項目即JEP201是爲了模塊化Java代碼,並將JRE分
成相互協做的組件。這個JEP是邁向Jigsaw四步中的第一步,它只是模塊化JDK源代碼,不會改變JRE和JDK的真實結構,從而使得編譯系統可以模
塊編譯並在構建時檢查模塊邊界。這個項目原計劃隨Java
8發佈,但由於推遲,因此被放到了Java
9中。Jigsaw項目一旦完成,將容許開發者根據項目的須要自定義組件,從而減小rt.jar的大小;還能夠作到使Java可以更加容易的應用到小型計
算設備(如網絡設備)中,同時也可以使得開發者更加容易地構建和維護這些類庫。更多相關信息參見JEP201。
 
二、簡化了的進程API
目前,Java控制與管理系統進程的能力是有限的,爲了得到操做系統的一些信息須要調用本地程序或者其餘變通方案。然而,在Java 9中將會新增一些新的、直接明瞭的方法來處理進程ID、名字和狀態以及枚舉多個JVM和進程等,從而擴展Java與操做系統的交互能力。
 
三、 輕量級的JSON API
儘管目前有多種處理JSON的Java工具(如Google的Gson、阿里巴巴的FastJson、IBM的Json4J等),但JSON API是Java語言的一部分,輕量而且運用了Java 8的新特性。JSONAPI將放在java.util包裏一塊兒發佈,這樣,開發者就能夠直接使用JDK而無需再引入第三方JSON工具包了。
 
四、 錢和貨幣的相關API
Java 9引入了新的貨幣API, 用來表示貨幣, 並支持幣種之間的轉換和各類複雜運算。
 
五、 改善鎖爭用機制
鎖爭用限制了許多Java多線程應用性能,新的鎖爭用機制改善了Java對象監視器的性能,並獲得了多種基準測試的驗證(如Volano),這類測試能夠估算JVM的極限吞吐量。實際中, 新的鎖爭用機制在22種不一樣的基準測試中都獲得了出色的成績。若是新的機制能在Java 9中獲得應用的話, 應用程序的性能將會大大提高。
 
六、代碼分段緩存
Java 9的另外一個性能提高來自於JIT(Just-in-time)編譯器。當某段代碼被大量重複執行的時候,虛擬機會把這段代碼編譯成機器碼(native code)並儲存在代碼緩存裏面,繼而經過訪問緩存中不一樣分段的代碼來提高編譯器的效率。代碼分段緩存機制將會提高許多方面的性能,如當JVM進行垃圾回收掃描的時候,就能夠直接跳過永駐
代碼,從而提高效率。
 
七、智能Java編譯工具
智能Java編譯工具(sjavac)的第一階段始於JEP139這個項目, 用於在多核處理器狀況下提高JDK的編譯速度。現在,這個項目已經進入第二階段即JEP199, 其目的是改進Java編譯工具,並取代目前JDK編譯工具javac,繼而成爲Java環境默認的通用的智能編譯工具。
期待但未肯定的特性
相關文章
相關標籤/搜索