java9新特性學習

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

  包含jdk8及之前的jdk版本,全部目錄結構以及目錄含義如圖:java

  jdk9以後,目錄結構發生變化如圖:數據結構

   

   這個新特性只要瞭解下就能夠了,這個目錄結構是方便爲了接下來新特性作保證iphone

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

     怎麼理解,怎麼用呢?這個只是針對於java9來講,至關於cmd工具,你能夠和cmd同樣,直接寫方法等等,不過我認爲只是適用於初學者作一些最簡單的運算和寫一些方法:jvm

  在cmd中打開這個工具:maven

進入工具後能夠作一些簡單的java操做編輯器

  。。。。等等,我認爲只適用於初學者學習java不用其餘編輯工具就能夠學習java模塊化

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

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

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

  在這個兩個模塊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 控制着那些包能夠被模塊訪問,因此不被導出的包不能被其餘模塊訪問

四、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的全部優點。

五、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(){} 
  } 

六、Java9新特性之---鑽石操做符的升級

//java7及之前 
  Map<String,String> map7 = new HashMap<String,String>(); 
  //java8 <>沒有了數據類型 
  Map<String,String> map8 = new HashMap<>(); 
  //java9 添加了匿名內部類的功能 +{} 
  Map<String,String> map9 = new HashMap<>(){};

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

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

  Java7處理方式:

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(){} 
}

  java8 的處理方式:

@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(); 
    } 
}

這下子應該一幕瞭然了吧

八、Java9新特性之---特殊標識符增長限制

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

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

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

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

 

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

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

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

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

  而 dropWhile 則和takeWhile 相反

  ofNullable, 在java8中 Stream中的元素不能徹底爲null,不然空指針異常,而在java9的升級中,容許建立null

  iterate 不加條件無線循環

十一、Java9新特性之---引進HttpClient

  以往咱們都是經過maven添加httpclient ,java9直接引入便可

相關文章
相關標籤/搜索