1. 程式人生 > >Java 9 新特性! 看過才知道強大

Java 9 新特性! 看過才知道強大

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  把它所在的包匯出 


然後在java9Test模組中建立一個package-info.java,引入java9Demo模組匯出包名


這樣就可以直接在java9Test中引入Person實體類了,這只是一個簡單的例子。exports 控制著那些包可以被模組訪問,所以不被匯出的包不能被其他模組訪問

4、Java9新特性之---多版本相容Jar包

怎麼理解呢?

好多公司用的jdk大部分還是老版本,jdk6,7 都有,他們都不敢升級主要是因為相容的問題,但是java9做到了這一點,就是不管公司的專案是用的java6,7,8甚至5,他都可以相容不出錯,打個比方,你之前用的是iphone5,現在出現了iPhone6,iphone7,iphon8和iphone9,但是你不敢買9,因為你自己已經適應了iphone5的所有手機的執行流程,6,7,8每個手機的執行流程不一樣,但是這個9很強大,它能夠識別你現在所用的版本iphone是5,所以當你升級到iphone9的時候,你的這個手機執行流程還是iphone5的流程,只是在原有基礎上擁有了更多的iphone9的所有優勢。

5、Java9新特性之---介面Interface的升級


6、Java9新特性之---鑽石操作符的升級


7、Java9新特性之---異常處理try升級

首先看下jdk6,7,8,9 的try catch的比較

Java6處理方式:


java7,8 共同的處理方式:


 java9的處理方式:


這下子應該一幕瞭然了吧

8、Java9新特性之---特殊識別符號增加限制

java8 之前 String _ ="hello";  這樣的識別符號可以用,java9就用不到。

9、Java9新特性之---String底層儲存結構更換

java8之前 String的底層結構型別都是 char[] ,但是java9 就替換成 byte[] 這樣來講,更節省了空間和提高了效能

    

    

之所以替換是因為 之前一直是最小單位是一個char,用到兩個byte,但是java8是基於latin1的,而這個latin1編碼可以用一個byte標識,所以當你資料明明可以用到一個byte的時候,我們用到了一個最小單位chat兩個byte,就多出了一個byte的空間。所以java9在這一方面進行了更新,現在的java9 是基於ISO/latin1/Utf-16  ,latin1和ISO用一個byte標識,UTF-16用兩個byte標識,java9會自動識別用哪個編碼,當資料用到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所有特性都是為了提高效能和記憶體。