包含jdk8及以前的jdk版本,所有目錄結(jié)構(gòu)以及目錄含義如圖:
創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)公司是一家服務(wù)多年做網(wǎng)站建設(shè)策劃設(shè)計(jì)制作的公司,為廣大用戶提供了成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè),成都網(wǎng)站設(shè)計(jì),廣告投放平臺(tái),成都做網(wǎng)站選創(chuàng)新互聯(lián)建站,貼合企業(yè)需求,高性價(jià)比,滿足客戶不同層次的需求一站式服務(wù)歡迎致電。
jdk9之后,目錄結(jié)構(gòu)發(fā)生變化如圖:
這個(gè)新特性只要了解下就可以了,這個(gè)目錄結(jié)構(gòu)是方便為了接下來新特性做保證
怎么理解,怎么用呢?這個(gè)只是針對(duì)于java9來說,相當(dāng)于cmd工具,你可以和cmd一樣,直接寫方法等等,不過我認(rèn)為只是適用于初學(xué)者做一些最簡(jiǎn)單的運(yùn)算和寫一些方法,在cmd中打開這個(gè)工具:
進(jìn)入工具后可以做一些簡(jiǎn)單的java操作
等等,我認(rèn)為只適用于初學(xué)者學(xué)習(xí)java不用其他編輯工具就可以學(xué)習(xí)java
一個(gè)大型的項(xiàng)目,比如淘寶商城等,都會(huì)包含多個(gè)模塊,比如訂單模塊,前臺(tái)模塊,后臺(tái)管理模塊,廣告位模塊,會(huì)員模塊.....等等,各個(gè)模塊之間會(huì)相互調(diào)用,不過這種情況下會(huì)很少,只針對(duì)特殊情況,如果一個(gè)項(xiàng)目有30個(gè)模塊系統(tǒng)進(jìn)行開發(fā),但是只要某個(gè)單獨(dú)模塊運(yùn)行時(shí),都會(huì)帶動(dòng)所有的模塊,這樣對(duì)于jvm來說在內(nèi)存和性能上會(huì)很低,所以,java9提供了這一個(gè)特性,某一個(gè)模塊運(yùn)行的時(shí)候,jvm只會(huì)啟動(dòng)和它有依賴的模塊,并不會(huì)加載所有的模塊到內(nèi)存中,這樣性能大大的提高了。寫法上如下:
一個(gè)項(xiàng)目中的兩個(gè)模塊,模塊之間通過module-info.java來關(guān)聯(lián),在IDEA編輯器右鍵創(chuàng)建package-info.java
在這個(gè)兩個(gè)模塊java9Demo和java9Test中,java9demo編寫一個(gè)實(shí)體類Person,在java9Test調(diào)用這樣一個(gè)過程
這個(gè)是java9Demo 將 java9Test 模塊需要的文件導(dǎo)出 exports 把它所在的包導(dǎo)出
module java9Demo{ exports com.mdxl.layer_cj.entity; }
然后在java9Test模塊中創(chuàng)建一個(gè)package-info.java,引入java9Demo模塊導(dǎo)出包名
module java9Test{ requires java9Demo; }
這樣就可以直接在java9Test中引入Person實(shí)體類了,exports 控制著那些包可以被模塊訪問,所以不被導(dǎo)出的包不能被其他模塊訪問。
怎么理解呢?
好多公司用的JDK大部分還是老版本,JDK6、7都有,他們都不敢升級(jí)主要是因?yàn)榧嫒莸膯栴},但是JDK9做到了這一點(diǎn),就是不管公司的項(xiàng)目是用的JDK6、7、8甚至5,他都可以兼容不出錯(cuò),打個(gè)比方,你之前用的是iphone5,現(xiàn)在出現(xiàn)了iPhone6,iphone7,iphon8和iphone9,但是你不敢買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ì)。
public interface FilterProcess<T> { //java 7 及以前 特性 全局常量 和抽象方法 public static final String a ="22"; boolean process(T t); //java 8 特性 靜態(tài)方法和默認(rèn)方法 default void love(){ System.out.println("java8 特性默認(rèn)方法"); } static void haha(){ System.out.println("java8 特性靜態(tài)方法"); } //java 8 特性 支持私有方法 private void java9(){} }
//java6及以前 Map<String,String> map7 = new HashMap<String,String>(); //java7和8 <>沒有了數(shù)據(jù)類型 Map<String,String> map8 = new HashMap<>(); //java9 添加了匿名內(nèi)部類的功能 后面添加了大括號(hào){} 可以做一些細(xì)節(jié)的操作 Map<String,String> map9 = new HashMap<>(){};
首先看下jdk6,7,8,9 的try catch的比較
Java6處理方式:
//java7及以前寫法 每一個(gè)流打開的時(shí)候都要關(guān)閉 @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及 每一個(gè)流打開的時(shí)候都要關(guān)閉,但是在try的括號(hào)中來進(jìn)行關(guān)閉 @Test public void test7(){ try(InputStreamReader reader =new InputStreamReader(System.in)){ reader.read(); }catch (IOException e){ e.printStackTrace(); } }
java9的處理方式:
//java9及 每一個(gè)流打開的時(shí)候都要關(guān)閉,但是在try的括號(hào)中來進(jìn)行關(guān)閉,在 //java8的基礎(chǔ)上進(jìn)一步升級(jí) 直接在try括號(hào)中直接寫入 變量就好,如果有多個(gè)流,就用分號(hào)隔開 //try(reader;writer){} @Test public void test7(){ InputStreamReader reader =new InputStreamReader(System.in); try(reader){ reader.read(); }catch (IOException e){ e.printStackTrace(); } }
JDK8之前 String _ ="hello"; 這樣的標(biāo)識(shí)符可以用,JDK9就用不到。
JDK8之前 String的底層結(jié)構(gòu)類型都是 char[] ,但是JDK9 就替換成 byte[] 這樣來講,更節(jié)省了空間和提高了性能。
之所以替換是因?yàn)?之前一直是最小單位是一個(gè)char,用到兩個(gè)byte,但是JDK8是基于latin1的,而這個(gè)latin1編碼可以用一個(gè)byte標(biāo)識(shí),所以當(dāng)你數(shù)據(jù)明明可以用到一個(gè)byte的時(shí)候,我們用到了一個(gè)最小單位chat兩個(gè)byte,就多出了一個(gè)byte的空間。所以JDK9在這一方面進(jìn)行了更新,現(xiàn)在的JDK9 是基于ISO/latin1/Utf-16 ,latin1和ISO用一個(gè)byte標(biāo)識(shí),UTF-16用兩個(gè)byte標(biāo)識(shí),JDK9會(huì)自動(dòng)識(shí)別用哪個(gè)編碼,當(dāng)數(shù)據(jù)用到1byte,就會(huì)使用iSO或者latin1 ,當(dāng)空間數(shù)據(jù)滿足2byte的時(shí)候,自動(dòng)使用utf-16,節(jié)省了很多空間。
*****同理,StringBuilder StringBuffer也更換了底層數(shù)據(jù)結(jié)構(gòu)*************
在原有Stream API 新添加了4個(gè)方法,takeWhile dropWhile ofNullable iterate(新重載方法)
首先解釋 takeWhile 當(dāng)達(dá)到一定條件就結(jié)束:輸出結(jié)果為45 43,如圖
而 dropWhile 則和takeWhile 相反
ofNullable, 在java8中 Stream中的元素不能完全為null,否則空指針異常,而在java9的升級(jí)中,允許創(chuàng)建null
iterate 不加條件無線循環(huán)
以往我們都是通過maven添加httpclient ,java9直接引入即可
Java9所有特性都是為了提高性能和內(nèi)存。。。。
文章題目:JDK9新特性詳解-創(chuàng)新互聯(lián)
文章URL:http://muchs.cn/article14/idpge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、軟件開發(fā)、自適應(yīng)網(wǎng)站、服務(wù)器托管、建站公司、全網(wǎng)營(yíng)銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容