1.目錄結(jié)構(gòu)
2.repl工具 jShell命令
3.模塊化
4.多版本兼容jar包
5.接口方法的改進(jìn)(在接口中 jdk7 只能聲明全名常量和抽象方法 jdk8 添加了靜態(tài)方法和默認(rèn)方法 jdk9添加了私有方法)
6.鉆石操作符升級(jí) 可以有{}
7.異常處理try升級(jí)
8.下劃線標(biāo)識(shí)符命名的限制 _ 不允許了
9.String底層存儲(chǔ)結(jié)構(gòu)的變更(char數(shù)組變成byte字節(jié)數(shù)組)
10.增強(qiáng)了Stream API(在java8基礎(chǔ)上滋尉,新增加4個(gè)方法)
11.jdk9 中引入httpClient api 代替原有的HttpURLConnection
1谦趣、Java9 新特性之---目錄結(jié)構(gòu)
包含jdk8及以前的jdk版本疲吸,所有目錄結(jié)構(gòu)以及目錄含義如圖:
jdk9之后,目錄結(jié)構(gòu)發(fā)生變化如圖:
![image](http://upload-images.jianshu.io/upload_images/5018582-dabf0e10676e7496?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
這個(gè)新特性只要了解下就可以了前鹅,這個(gè)目錄結(jié)構(gòu)是方便為了接下來(lái)新特性做保證
2摘悴、Java9新特性之---JShell工具
怎么理解,怎么用呢嫡纠?這個(gè)只是針對(duì)于java9來(lái)說(shuō)烦租,相當(dāng)于cmd工具,你可以和cmd一樣除盏,直接寫(xiě)方法等等叉橱,不過(guò)我認(rèn)為只是適用于初學(xué)者做一些最簡(jiǎn)單的運(yùn)算和寫(xiě)一些方法:
在cmd中打開(kāi)這個(gè)工具:
![image](http://upload-images.jianshu.io/upload_images/5018582-21062b260553b2b4?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
進(jìn)入工具后可以做一些簡(jiǎn)單的java操作
![image](http://upload-images.jianshu.io/upload_images/5018582-320e4950d7e424a6?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
等等,我認(rèn)為只適用于初學(xué)者學(xué)習(xí)java不用其他編輯工具就可以學(xué)習(xí)java
3者蠕、Java9新特性之---模塊化
一個(gè)大型的項(xiàng)目窃祝,比如淘寶商城等,都會(huì)包含多個(gè)模塊踱侣,比如訂單模塊粪小,前臺(tái)模塊,后臺(tái)管理模塊抡句,廣告位模塊探膊,會(huì)員模塊.....等等,各個(gè)模塊之間會(huì)相互調(diào)用待榔,不過(guò)這種情況下會(huì)很少逞壁,只針對(duì)特殊情況流济,如果一個(gè)項(xiàng)目有30個(gè)模塊系統(tǒng)進(jìn)行開(kāi)發(fā),但是只要某個(gè)單獨(dú)模塊運(yùn)行時(shí)腌闯,都會(huì)帶動(dòng)所有的模塊绳瘟,這樣對(duì)于jvm來(lái)說(shuō)在內(nèi)存和性能上會(huì)很低,所以姿骏,java9提供了這一個(gè)特性糖声,某一個(gè)模塊運(yùn)行的時(shí)候,jvm只會(huì)啟動(dòng)和它有依賴(lài)的模塊分瘦,并不會(huì)加載所有的模塊到內(nèi)存中蘸泻,這樣性能大大的提高了。寫(xiě)法上如下:
![image](http://upload-images.jianshu.io/upload_images/5018582-5fd1790320b4fa3d?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
一個(gè)項(xiàng)目中的兩個(gè)模塊嘲玫,模塊之間通過(guò)module-info.java來(lái)關(guān)聯(lián)蟋恬,在IDEA編輯器右鍵創(chuàng)建package-info.java
![image](http://upload-images.jianshu.io/upload_images/5018582-effe0e17d530c372?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
在這個(gè)兩個(gè)模塊java9Demo和java9Test中,java9demo編寫(xiě)一個(gè)實(shí)體類(lèi)Person,在java9Test調(diào)用這樣一個(gè)過(guò)程
這個(gè)是java9Demo 將 java9Test 模塊需要的文件導(dǎo)出 exports 把它所在的包導(dǎo)出
然后在java9Test模塊中創(chuàng)建一個(gè)package-info.java,引入java9Demo模塊導(dǎo)出包名
這樣就可以直接在java9Test中引入Person實(shí)體類(lèi)了趁冈,這只是一個(gè)簡(jiǎn)單的例子。exports 控制著那些包可以被模塊訪問(wèn)拜马,所以不被導(dǎo)出的包不能被其他模塊訪問(wèn)
4渗勘、Java9新特性之---多版本兼容Jar包
怎么理解呢?
好多公司用的jdk大部分還是老版本俩莽,jdk6,7 都有旺坠,他們都不敢升級(jí)主要是因?yàn)榧嫒莸膯?wèn)題,但是java9做到了這一點(diǎn)扮超,就是不管公司的項(xiàng)目是用的java6,7,8甚至5取刃,他都可以兼容不出錯(cuò),打個(gè)比方出刷,你之前用的是iphone5璧疗,現(xiàn)在出現(xiàn)了iPhone6,iphone7馁龟,iphon8和iphone9崩侠,但是你不敢買(mǎi)9,因?yàn)槟阕约阂呀?jīng)適應(yīng)了iphone5的所有手機(jī)的運(yùn)行流程坷檩,6,7,8每個(gè)手機(jī)的運(yùn)行流程不一樣却音,但是這個(gè)9很強(qiáng)大,它能夠識(shí)別你現(xiàn)在所用的版本iphone是5矢炼,所以當(dāng)你升級(jí)到iphone9的時(shí)候系瓢,你的這個(gè)手機(jī)運(yùn)行流程還是iphone5的流程,只是在原有基礎(chǔ)上擁有了更多的iphone9的所有優(yōu)勢(shì)句灌。
5夷陋、Java9新特性之---接口Interface的升級(jí)
6、Java9新特性之---鉆石操作符的升級(jí)
7、Java9新特性之---異常處理try升級(jí)
首先看下jdk6,7,8,9 的try catch的比較
Java6處理方式:
java7,8 共同的處理方式:
java9的處理方式:
這下子應(yīng)該一幕了然了吧
8肌稻、Java9新特性之---特殊標(biāo)識(shí)符增加限制
java8 之前 String _ ="hello"; 這樣的標(biāo)識(shí)符可以用拱烁,java9就用不到夕玩。
9、Java9新特性之---String底層存儲(chǔ)結(jié)構(gòu)更換
java8之前 String的底層結(jié)構(gòu)類(lèi)型都是 char[] ,但是java9 就替換成 byte[] 這樣來(lái)講,更節(jié)省了空間和提高了性能
![image](http://upload-images.jianshu.io/upload_images/5018582-5b88232c7d08d4e2?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image](http://upload-images.jianshu.io/upload_images/5018582-0a549e682a4799e3?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
之所以替換是因?yàn)?之前一直是最小單位是一個(gè)char酵熙,用到兩個(gè)byte,但是java8是基于latin1的,而這個(gè)latin1編碼可以用一個(gè)byte標(biāo)識(shí)变屁,所以當(dāng)你數(shù)據(jù)明明可以用到一個(gè)byte的時(shí)候议惰,我們用到了一個(gè)最小單位chat兩個(gè)byte,就多出了一個(gè)byte的空間腹泌。所以java9在這一方面進(jìn)行了更新嘶卧,現(xiàn)在的java9 是基于ISO/latin1/Utf-16 ,latin1和ISO用一個(gè)byte標(biāo)識(shí),UTF-16用兩個(gè)byte標(biāo)識(shí),java9會(huì)自動(dòng)識(shí)別用哪個(gè)編碼凉袱,當(dāng)數(shù)據(jù)用到1byte芥吟,就會(huì)使用iSO或者latin1 ,當(dāng)空間數(shù)據(jù)滿(mǎn)足2byte的時(shí)候专甩,自動(dòng)使用utf-16,節(jié)省了很多空間
![image](http://upload-images.jianshu.io/upload_images/5018582-590576b4b4b2e88e?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
同理钟鸵,StringBuilder StringBuffer也更換了底層數(shù)據(jù)結(jié)構(gòu)
10、Java9新特性之---Stream API 新方法的添加
在原有Stream API 新添加了4個(gè)方法涤躲,takeWhile dropWhile ofNullable iterate(新重載方法)
首先解釋 takeWhile 當(dāng)達(dá)到一定條件就結(jié)束:輸出結(jié)果為45 43棺耍,如圖
![image](http://upload-images.jianshu.io/upload_images/5018582-8153a10bd2a1ad0f?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
而 dropWhile 則和takeWhile 相反
ofNullable, 在java8中 Stream中的元素不能完全為null,否則空指針異常种樱,而在java9的升級(jí)中蒙袍,允許創(chuàng)建null
iterate 不加條件無(wú)線循環(huán)
![image](http://upload-images.jianshu.io/upload_images/5018582-f517b3087c95e799?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
11、Java9新特性之---引進(jìn)HttpClient
以往我們都是通過(guò)maven添加httpclient ,java9直接引入即可
Java9所有特性都是為了提高性能和內(nèi)存
文章來(lái)源于:架構(gòu)師微信公眾號(hào)