JDK9的新特性

二、模塊化系統----Jigsaw項目java

    ①能夠在更小的設備中運行;算法

    ②必須的jdk模塊,非所有jdk模塊;app

    ③甚至開發者還能夠建立本身的模塊來簡化代碼;模塊化

    ④內部的API(com.sun.*),默認狀況下是不能使用,即:全部的模塊須要在所謂的module-info.java文件中進行描述,這個文件是位於java代碼結構的頂層(相似於import)工具

    總結一句就是:獨立模塊,化繁爲簡。性能

  三、集合的of新特性優化

    ①Map中存值變得更簡單spa

     在集合中統一增長了一個of方法,List/Set/Map均可以調用of方法直接存入key,value命令行

   

複製代碼
 1 //JDK8
 2 Map <String,String> immutableMap =  Collections.unmodifiableMap(new HashMap<String,String>(){{            
 3           put("張鬆","課程1");
 4           put("王述","課程2");
 5           put("陳曉","課程3");    
 6 }})   
 7 
 8 //JDK9
 9 Map <String,String> immutableMap =  
10 Map.of("張鬆","課程1","王述","課程2","陳曉","課程3");     
複製代碼

 四、JShell--Java 9 REPL:是一種快速運行語句的命令行工具調試

   在Java 9 中JShell能夠在沒有建立類的狀況下直接聲明變量,計算表達式,執行語句。JShell也能夠從文件中加載語句或將語句保存到文件中。而且JShell也能夠是Tab鍵進行自動補全的特性。這就區別於main方法類,Test類。

   總結就是:執行JShell則能夠所見即所得,即時結果和反饋。

 五、Reactive  Streams(響應式流)

   Java 9 中有一個Flow API ,主要有如下幾個重要的類:

  ① Flow.Processor(處理器)

  ② Flow.Publisher (發佈者)

  ③ Flow.Subscriber(訂閱者)

  ④ Flow.Subscription(訂閱管理器)

  Java 9 中也提供了實用類------SubmissionPublisher,一個發佈者產生一個或者多個物品,這些物品由一個或者多個消費者來消耗,而且訂閱者由訂閱管理器管理,訂閱管理器鏈接訂閱者和發佈者。

 六、Interfaces(接口差別)

  在JDK8中提出在接口中引入默認方法和靜態方法,而在JDK9中實現了在接口中引入默認方法和靜態方法。

  具體包含:能夠共享接口中的私有方法,去除冗餘,邏輯更加清晰。若是私有方法是靜態的,那麼這個方法就屬於這個接口的,且沒有靜態的私有方法只能被在接口中的實例調用。

 七、API-JEP 251(多分辨率圖像)

  Java 9 新的API定義在java.awt.image包。

  具體包括:

  ①將不一樣分辨率的圖像封裝到一張(多分辨率的)圖像中,做爲它的變體。

  ②獲取這個圖像的全部變體。

  ③獲取特定分辨率的圖像變體,表示一張已知分辨率單位爲DPI的特定尺寸大小的邏輯圖像,而且這張圖像是最佳的變體。

  ④基於當前屏幕分辨率大小和運用圖像轉換算法,java.awt.Graphics類能夠直接從接口MultiResolutionImage獲取所需的變體。java.awt.image.AbstarctMultiResolutionImage類提供了ava.awt.image.AbstarctMultiResolutionImage的默認實現。AbstarctMultiResolutionImage的基礎實現是java.awt.image.BaseMultiResolutionImage。

  八、進程改善和鎖機制的優化

    Process API Improvements(進程API的改善):改善鎖爭用機制,程序的性能將大大地改善。

    如:Process.getCurrentPid()方法能夠代替不少原來JDK版本的代碼。

  九、Try-with-Resource

  JDK7中try-with-resource語法要求爲每個資源聲明一個新的變量,而這些語句由try-with-resource語句進行管理。

  JDK9中若是一個資源被final或等效於final變量引用,則在不須要一個新的變量的狀況下,try-with-resource就能夠對這個資源進行管理。

複製代碼
MyAutoCloseable arrayClass  =  new MyAutoCloseable();
        try (arrayClass){
              //業務代碼省略  
}

        try(new MyAutoCloseable(){
}.finalWrapper.finalCloseable){
             //業務代碼省略
}        
複製代碼

  十、Diamond  Operator  Scope  Extension操做符範圍的延伸

複製代碼
//JDK5--JDK7
List<String>  preJava7 = new ArrayList<String>();

//JDK7以後
List<String> java7 = new ArrayList<>();

//只有JDK9以下代碼才能編譯經過(匿名類上能夠)
List<String> list = new ArrayList<>(){};
複製代碼

    十一、Deprecated annotation Enhanced

  喚醒已廢棄的API ---- 在JDK9中:註解@Deprecated能夠標記Java API,使用了哪些已廢棄的API。

  十二、Unified JVM Logging(統一的JVM日誌系統)

  在JDK9中統一了日誌,提供了一種解決問題的有效途徑。

  在以往的低版本中很難知道致使JVM性能問題和致使JVM崩潰的根本緣由。不一樣的JVM對日誌的使用是不一樣的機制和規則,這就使得JVM難以進行調試。

  解決這個問題最佳的方法:對全部的JVM組件引入一個單一的系統,這些JVM組件支持細粒度的和易配置的JVM組件。

  1三、SafeVarargs Scope Extension(註釋SafeVarargs範圍的延伸)

複製代碼
1 //JDK9:@Safevarargs可使用
2 @SafeVarargs
3 private void iAmArrayDemoMethod(String... arrayDemos){
4     for(String i : arrayDemos){
5         System.out.println("這個是此標籤的用法:"+ i);
6     }
7 }
8     
複製代碼

  1四、HTTP 2 客戶端

  JDK9使用了全新的HTTP客戶端API,支持HTTP/2協議和WebSocket協議,而且替換了遺留的HTTPURL Connection API,這些API能夠從Incubator(孵化器)模塊中獲取。所以在默認狀況下,這個模塊是不能根據classpath獲取的,須要使用--add--modules命令選項配置這個模塊,將這個模塊添加到classpath中。

  除了這個簡答的請求/響應模型外,HttpClient還提供了新的API來處理HTTP/2的特性,好比流和服務端推送。

  1五、HTML5 Javadoc

  在JDK8中生成的Java幫助文檔是在HTML4中,而HTML4已是好久的標準了。而在JDK9中提供了一種選擇,讓Javadoc的輸出兼容符合標準的HTML5格式,並向下兼容HTML4。

  1六、多版本兼容JAR

  JDK9中提供了在建立特定版本的Java環境中運行庫程序時選擇使用的class版本;好比:

 

  1七、Segmented Code Cache

  在JDK9中的代碼段在Segmented Code Cache的做用下,能夠被更加細分,並且每一個代碼段還能夠包括特定類型的編譯代碼,這個功能一樣也有望提高Java 9的性能。

  1八、錢和貨幣的相關API

  JDK9中引入了新的貨比API,用來表示貨幣,並支持幣種之間的轉換和各類複雜運算。

複製代碼
 1 //Maven項目
 2     <dependency>
 3         <groupId>org.javamoney</groupId>
 4         <artifactId>moneta</artifactId>
 5         <version>0.9</version>
 6     </dependency>
 7 
 8 //根據貨幣代碼來獲取貨幣單位
 9 CurrencyUnit arrayo = MonetaryCurrencies.getCurrency("EUR");
10 CurrencyUnit arrayusDollar=MonetaryCurrencies.getCurrency("USD");
11 
12 //根據國家和地區來獲取貨幣單位
13 CurrencyUnit arrayyen = MonetaryCurrencies.getCurrency("Locale.JAPAN");
14 CurrencyUnit arraycanadianDollar = MonetaryCurrencies.getCurrency("Locale.CANADA");
複製代碼

  1九、智能Java編譯工具

 JDK9中的智能Java編譯工具(s javac)的第一階段始於JEP139這個項目,用於在多核處理器狀況下提高JDK的編譯速度。現在,這個項目已經進入第二階段即JEP199,其目的是改進Java編譯工具,並取代目前JDK編譯工具javac,繼而成爲Java環境默認的通用的智能編譯工具。

相關文章
相關標籤/搜索