JDK9新特性詳解
1、Java9新特性之目錄結構
包含jdk8及以前的jdk版本,所有目錄結構以及目錄含義如圖:
jdk9之後,目錄結構發生變化如圖:
這個新特性只要瞭解下就可以了,這個目錄結構是方便為了接下來新特性做保證
2、Java9新特性之JShell工具
怎麼理解,怎麼用呢?這個只是針對於java9來說,相當於cmd工具,你可以和cmd一樣,直接寫方法等等,不過我認為只是適用於初學者做一些最簡單的運算和寫一些方法,在cmd中開啟這個工具:
進入工具後可以做一些簡單的java操作
等等,我認為只適用於初學者學習java不用其他編輯工具就可以學習java
3、Java9新特性之模組化
一個大型的專案,比如淘寶商城等,都會包含多個模組,比如訂單模組,前臺模組,後臺管理模組,廣告位模組,會員模組.....等等,各個模組之間會相互呼叫,不過這種情況下會很少,只針對特殊情況,如果一個專案有30個模組系統進行開發,但是隻要某個單獨模組執行時,都會帶動所有的模組,這樣對於jvm來說在記憶體和效能上會很低,所以,java9提供了這一個特性,某一個模組執行的時候,jvm只會啟動和它有依賴的模組,並不會載入所有的模組到記憶體中,這樣效能大大的提高了。寫法上如下:
一個專案中的兩個模組,模組之間透過module-info.java來關聯,在IDEA編輯器右鍵建立package-info.java
在這個兩個模組java9Demo和java9Test中,java9demo編寫一個實體類Person,在java9Test呼叫這樣一個過程
這個是java9Demo 將 java9Test 模組需要的檔案匯出 exports 把它所在的包匯出
module java9Demo{ exports com.mdxl.layer_cj.entity; }
然後在java9Test模組中建立一個package-info.java,引入java9Demo模組匯出包名
module java9Test{ requires java9Demo; }
這樣就可以直接在java9Test中引入Person實體類了,exports 控制著那些包可以被模組訪問,所以不被匯出的包不能被其他模組訪問。
4、Java9新特性之多版本相容Jar包
怎麼理解呢?
好多公司用的JDK大部分還是老版本,JDK6、7都有,他們都不敢升級主要是因為相容的問題,但是JDK9做到了這一點,就是不管公司的專案是用的JDK6、7、8甚至5,他都可以相容不出錯,打個比方,你之前用的是iphone5,現在出現了iPhone6,iphone7,iphon8和iphone9,但是你不敢買9,因為你自己已經適應了iphone5的所有手機的執行流程,6,7,8每個手機的執行流程不一樣,但是這個9很強大,它能夠識別你現在所用的版本iphone是5,所以當你升級到iphone9的時候,你的這個手機執行流程還是iphone5的流程,只是在原有基礎上擁有了更多的iphone9的所有優勢。
5、Java9新特性之介面Interface的升級
public interface FilterProcess<T> { //java 7 及以前 特性 全域性常量 和抽象方法 public static final String a ="22"; boolean process(T t); //java 8 特性 靜態方法和預設方法 default void love(){ System.out.println("java8 特性預設方法"); } static void haha(){ System.out.println("java8 特性靜態方法"); } //java 8 特性 支援私有方法 private void java9(){} }
6、Java9新特性之鑽石運算子的升級
//java6及以前 Map<String,String> map7 = new HashMap<String,String>(); //java7和8 <>沒有了資料型別 Map<String,String> map8 = new HashMap<>(); //java9 新增了匿名內部類的功能 後面新增了大括號{} 可以做一些細節的操作 Map<String,String> map9 = new HashMap<>(){};
7、Java9新特性之異常處理try升級
首先看下jdk6,7,8,9 的try catch的比較
Java6處理方式:
//java7及以前寫法 每一個流開啟的時候都要關閉 @Test public void test7(){ InputStreamReader reader = null; try{ reader = new InputStreamReader(System.in); reader.read(); }catch (IOException e){ e.printStackTrace(); }finally { if (reader != null){ try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } }
JDK7,8 共同的處理方式:
//java7和8及 每一個流開啟的時候都要關閉,但是在try的括號中來進行關閉 @Test public void test7(){ try(InputStreamReader reader =new InputStreamReader(System.in)){ reader.read(); }catch (IOException e){ e.printStackTrace(); } }
java9的處理方式:
//java9及 每一個流開啟的時候都要關閉,但是在try的括號中來進行關閉,在 //java8的基礎上進一步升級 直接在try括號中直接寫入 變數就好,如果有多個流,就用分號隔開 //try(reader;writer){} @Test public void test7(){ InputStreamReader reader =new InputStreamReader(System.in); try(reader){ reader.read(); }catch (IOException e){ e.printStackTrace(); } }
8、Java9新特性之特殊識別符號增加限制
JDK8之前 String _ ="hello"; 這樣的識別符號可以用,JDK9就用不到。
9、Java9新特性之String底層儲存結構更換
JDK8之前 String的底層結構型別都是 char[] ,但是JDK9 就替換成 byte[] 這樣來講,更節省了空間和提高了效能。
之所以替換是因為 之前一直是最小單位是一個char,用到兩個byte,但是JDK8是基於latin1的,而這個latin1編碼可以用一個byte標識,所以當你資料明明可以用到一個byte的時候,我們用到了一個最小單位chat兩個byte,就多出了一個byte的空間。所以JDK9在這一方面進行了更新,現在的JDK9 是基於ISO/latin1/Utf-16 ,latin1和ISO用一個byte標識,UTF-16用兩個byte標識,JDK9會自動識別用哪個編碼,當資料用到1byte,就會使用iSO或者latin1 ,當空間資料滿足2byte的時候,自動使用utf-16,節省了很多空間。
*****同理,StringBuilder StringBuffer也更換了底層資料結構*************
10、Java9新特性之Stream API 新方法的新增
在原有Stream API 新新增了4個方法,takeWhile dropWhile ofNullable iterate(新過載方法)
首先解釋 takeWhile 當達到一定條件就結束:輸出結果為45 43,如圖
而 dropWhile 則和takeWhile 相反
ofNullable, 在java8中 Stream中的元素不能完全為null,否則空指標異常,而在java9的升級中,允許建立null
iterate 不加條件無線迴圈
11、Java9新特性之引進HttpClient
以往我們都是透過maven新增httpclient ,java9直接引入即可
Java9所有特性都是為了提高效能和記憶體。。。。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9399028/viewspace-2674082/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JDK9新特性-你瞭解多少JDK
- Android Studio 新特性詳解Android
- JDK8新特性詳解JDK
- JDK10新特性詳解JDK
- JDK11新特性詳解JDK
- JDK12新特性詳解JDK
- JDK13新特性詳解JDK
- 詳解C#7.0新特性C#
- Java8 新特性詳解Java
- JDK8新特性詳解(二)JDK
- JDK8新特性詳解(一)JDK
- 收藏版:《JDK13新特性詳解》JDK
- Oracle 18c新特性詳解 - 表和表空間相關的新特性Oracle
- java JDK1.7版本新特性詳解JavaJDK
- Dubbo3詳解(5大新特性及功能圖解)圖解
- Oracle 18c新特性詳解:In-Memory 專題Oracle
- C#–特性詳解C#
- 全面煥新|詳解 Grafana v9.0.x 新增功能特性Grafana
- Oracle 18c新特性詳解-多租戶專題Oracle
- Swift 5新特性詳解:ABI 穩定終於來了!Swift
- Win10 Build 17692釋出 7個新特性詳解Win10UI
- ES10特性詳解
- 整理了一份php8新特性詳解pdf文件PHP
- 顯微鏡下的webpack4的新特性:mode詳解Web
- SpreadJS 類Excel表格控制元件 - V12 新特性詳解JSExcel控制元件
- Kubernetes 1.24新特性解讀
- 蒲公英 · JELLY技術週刊 Vol.14: Vue 3 新特性詳解Vue
- Apache Kyuubi 1.6.0 新特性解讀Apache
- React 16 新特性全解(上)React
- Python 3.8 新特性全面解讀Python
- C# 9.0新特性詳解系列之三:模組初始化器C#
- 詳解C#特性和反射(四)C#反射
- 詳解C#特性和反射(三)C#反射
- 詳解C#特性和反射(二)C#反射
- 詳解C#特性和反射(一)C#反射
- vue-cli 3.0新特性解讀Vue
- Python 3 新特性:型別註解Python型別
- 特性更新!DistSQL 叢集治理能力詳解SQL