天天看點

Java9 新特性 詳解

作者:木九天   《   Java9 新特性 詳解  》

Java9 新特性 詳解

摘要: 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版本,所有目錄結構以及目錄含義如圖:

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<T> {

    //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,String> map7 = new HashMap<String,String>();
//java7和8 <>沒有了資料類型
Map<String,String> map8 = new HashMap<>();
//java9 添加了匿名内部類的功能 後面添加了大括号{}  可以做一些細節的操作
Map<String,String> map9 = new HashMap<>(){};      

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

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

    Java6處理方式:

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

    java7,8 共同的處理方式:

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

    java9的處理方式:

//java9及 每一個流打開的時候都要關閉,但是在try的括号中來進行關閉,在
//java8的基礎上進一步更新 直接在try括号中直接寫入 變量就好,如果有多個流,就用分号隔開
//try(reader;writer){}
@Test
public 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,用到兩個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,節省了很多空間

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

為人:謙遜、激情、博學、審問、慎思、明辨、 笃行

學問:紙上得來終覺淺,絕知此事要躬行

為事:工欲善其事,必先利其器。

态度:道阻且長,行則将至;行而不辍,未來可期

轉載請标注出處!