歡迎光臨
每天分享高質量文章

Java 9 新特性,看這裡就明白了

來自:木九天 的博客

鏈接:https://my.oschina.net/u/3209213/blog/1622984

摘要: 


1.目錄結構 

2.repl工具 jShell命令 

3.模塊化 

4.多版本兼容jar包 

5.接口方法的改進(在接口中 jdk7 只能宣告全名常量和抽象方法 jdk8 添加了靜態方法和預設方法 jdk9添加了私有方法)

6.鑽石運算子升級 可以有{} 

7.異常處理try升級 

8.下劃線識別符號命名的限制 _ 不允許了 

9.String底層儲存結構的變更(char陣列變成byte位元組陣列) 

10.增強了Stream API(在java8基礎上,新增加4個方法) 

11.jdk9 中引入httpClient api 代替原有的HttpURLConnection

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所有特性都是為了提高性能和記憶體。


●本文編號620,以後想閱讀這篇文章直接輸入620即可

●輸入m獲取文章目錄

推薦↓↓↓

 

演算法與資料結構

更多推薦18個技術類微信公眾號

涵蓋:程式人生、演算法與資料結構、黑客技術與網絡安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

赞(0)

分享創造快樂