Java 9 新特性學習記錄

參考:

  1. https://my.oschina.net/u/3209213/blog/1622984
  2. https://www.ibm.com/developerworks/cn/java/the-new-features-of-Java-9/index.html
  3. http://www.importnew.com/24528.html
  4. https://docs.oracle.com/javase/9/whatsnew/toc.htm

1. 模塊化

這個在其它語言中早就有了,主要是對大型系統很有幫助,可以有效的降低打包大小
、減少內存消耗、提升效率。

根目錄中添加一個描述模塊的 module-info.java 文件,其中描述模塊的依賴和export,依此分析模塊之間的相互依賴。

不過我個人對需要添加這樣的描述文件的方式還是有點懷疑,這更像一個強力約束。因為 Java 代碼實現中本身就有 import, 是否公開有public,理論上可以根據這些來做模塊級別依賴分析,當然可能比較麻煩。標記下!
后記, 下面這篇文章基本解決了我的疑問,本質是一個模塊級別的package:
Java 9的模塊化--壯士斷"腕"的涅槃

2. JShell

java 語法這么復雜,搞個shell,表示懷疑實用性。用來吸引初學者?

或者 Java 準備繼續簡化下語法?

3. 多版本兼容Jar包

個人覺得這是個非常好的特性,很大程度上會提升舊系統維護者的升級意愿、幫助庫的開發者快速開始使用新特性。

這個特性結合 Java 新的版本機制來看,就更有必要了,這么快的發布機制,如果老的方式,大家使用新版本特性簡直就會疲于奔命啊!

多版本兼容 JAR 功能能讓你創建僅在特定版本的 Java 環境中運行庫程序時選擇使用的 class 版本:

multirelease.jar
├── META-INF
│   └── versions
│       └── 9
│           └── multirelease
│               └── Helper.class
├── multirelease
    ├── Helper.class
    └── Main.class

4. 小升級

接口允許私有方法

對庫開發者是蠻有用的,進一步干掉多此一舉的 抽象類

public interface SayHi { 
    private String buildMessage() { 
        return "Hello"; 
    } 
    void sayHi(final String message); 
    default void sayHi() { 
        sayHi(buildMessage()); 
    } 
}

升級 集合、Stream 和 Optional 接口

  1. 集合: 添加 List.of()、Set.of()、Map.of() 和 M ap.ofEntries()
List.of(); 
List.of("Hello", "World"); 
List.of(1, 2, 3);
Set.of(); 
Set.of("Hello", "World"); 
Set.of(1, 2, 3);
Map.of();
Map.of("Hello", 1, "World", 2);
  1. Stream:添加 ofNullable、dropWhile、takeWhile 和 iterate
@Test 
public void testDropWhile() throws Exception { 
    final long count = Stream.of(1, 2, 3, 4, 5) 
        .dropWhile(i -> i % 2 != 0) 
        .count(); 
    assertEquals(4, count); 
}
  1. Collectors : 添加 filtering 和 flatMapping
  2. Optional :添加了 ifPresentOrElse、or 和 stream 等方法

升級 <>

//java6及以前
Map<String,String> map6 = new HashMap<String,String>();
//java7和8 <>沒有了數據類型
Map<String,String> map7 = new HashMap<>();
//java9 添加了匿名內部類的功能 后面添加了大括號{}  可以做一些細節的操作
Map<String,String> map9 = new HashMap<>(){};

try 升級

Java7 的方式很像 Python 中 with 方式打開文件的處理方式。
Java9 的方式,嗯,也蠻好吧,至少處理多個方便的多,看起來也舒服。

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

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

G1 作為默認垃圾回收器

沒啥好說的,應該的, 成熟度足夠了

總結

整體而言,Java9 的升級基本集中提升性能、減少內存、更便于維護;更進一步適應云時代。 Java還是會很有生命力的!

另外,Java10 最期待類型推導了。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容