02.24 Java9 新特性 詳解

1、Java9新特性之---目錄結構

包含jdk8及以前的jdk版本,所有目錄結構以及目錄含義如圖:

Java9 新特性 詳解

Java9 新特性 詳解

jdk9之後,目錄結構發生變化如圖:

Java9 新特性 詳解

這個新特性只要瞭解下就可以了,這個目錄結構是方便為了接下來新特性做保證

2、Java9新特性之---JShell工具

怎麼理解,怎麼用呢?這個只是針對於java9來說,相當於cmd工具,你可以和cmd一樣,直接寫方法等等,不過我認為只是適用於初學者做一些最簡單的運算和寫一些方法:

在cmd中打開這個工具:

Java9 新特性 詳解

進入工具後可以做一些簡單的java操作

Java9 新特性 詳解

。。。。等等,我認為只適用於初學者學習java不用其他編輯工具就可以學習java

3、Java9新特性之---模塊化

一個大型的項目,比如淘寶商城等,都會包含多個模塊,比如訂單模塊,前臺模塊,後臺管理模塊,廣告位模塊,會員模塊.....等等,各個模塊之間會相互調用,不過這種情況下會很少,只針對特殊情況,如果一個項目有30個模塊系統進行開發,但是隻要某個單獨模塊運行時,都會帶動所有的模塊,這樣對於jvm來說在內存和性能上會很低,所以,java9提供了這一個特性,某一個模塊運行的時候,jvm只會啟動和它有依賴的模塊,並不會加載所有的模塊到內存中,這樣性能大大的提高了。寫法上如下:

Java9 新特性 詳解

一個項目中的兩個模塊,模塊之間通過module-info.java來關聯,在IDEA編輯器右鍵創建package-info.java

Java9 新特性 詳解

在這個兩個模塊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 都有,他們都不敢升級主要是因為兼容的問題,但是java9做到了這一點,就是不管公司的項目是用的java6,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 { //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> map7 = new HashMap<string>();//java7和8 <>沒有了數據類型Map<string> map8 = new HashMap<>();//java9 添加了匿名內部類的功能 後面添加了大括號{} 可以做一些細節的操作Map<string> map9 = new HashMap<>(){};/<string>/<string>/<string>/<string>

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

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

Java6處理方式:

//java7及以前寫法 每一個流打開的時候都要關閉@Testpublic 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();
}
}
}
}

java7,8 共同的處理方式:

//java7和8及 每一個流打開的時候都要關閉,但是在try的括號中來進行關閉@Testpublic void test7(){ try(InputStreamReader reader =new InputStreamReader(System.in)){
reader.read();
}catch (IOException e){
e.printStackTrace();
}

}

java9的處理方式:

//java9及 每一個流打開的時候都要關閉,但是在try的括號中來進行關閉,在//java8的基礎上進一步升級 直接在try括號中直接寫入 變量就好,如果有多個流,就用分號隔開//try(reader;writer){}@Testpublic void test7(){
InputStreamReader reader =new InputStreamReader(System.in); try(reader){
reader.read();
}catch (IOException e){
e.printStackTrace();
}
}

這下子應該一幕瞭然了吧

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

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

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

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

Java9 新特性 詳解

Java9 新特性 詳解

之所以替換是因為 之前一直是一個漢字一個兩個字節,但是字母是一個字節,而一個char代表兩個字節,由之前java8的utf-16 裝換成了 utf-8/utf-16/latin三種存儲方式

Java9 新特性 詳解

*****同理,StringBuilder StringBuffer也更換了底層數據結構*************

10、Java9新特性之---Stream API 新方法的添加

在原有Stream API 新添加了4個方法,takeWhile dropWhile ofNullable iterate(新重載方法)

首先解釋 takeWhile 當達到一定條件就結束:輸出結果為45 43,如圖

Java9 新特性 詳解

而 dropWhile 則和takeWhile 相反

ofNullable, 在java8中 Stream中的元素不能完全為null,否則空指針異常,而在java9的升級中,允許創建null

iterate 不加條件無線循環

Java9 新特性 詳解

11、Java9新特性之---引進HttpClient

以往我們都是通過maven添加httpclient ,java9直接引入即可

Java9所有特性都是為了提高性能和內存。。。。


分享到:


相關文章: