參考:
1. 模塊化
這個在其它語言中早就有了膜眠,主要是對大型系統(tǒng)很有幫助岩臣,可以有效的降低打包大小
、減少內存消耗宵膨、提升效率架谎。
根目錄中添加一個描述模塊的 module-info.java
文件,其中描述模塊的依賴和export辟躏,依此分析模塊之間的相互依賴谷扣。
不過我個人對需要添加這樣的描述文件的方式還是有點懷疑,這更像一個強力約束。因為 Java 代碼實現(xiàn)中本身就有 import, 是否公開有public会涎,理論上可以根據(jù)這些來做模塊級別依賴分析裹匙,當然可能比較麻煩。標記下末秃!
后記, 下面這篇文章基本解決了我的疑問概页,本質是一個模塊級別的package:
Java 9的模塊化--壯士斷"腕"的涅槃
2. JShell
java 語法這么復雜惰匙,搞個shell,表示懷疑實用性秃臣。用來吸引初學者?
或者 Java 準備繼續(xù)簡化下語法稚虎?
3. 多版本兼容Jar包
個人覺得這是個非常好的特性,很大程度上會提升舊系統(tǒng)維護者的升級意愿、幫助庫的開發(fā)者快速開始使用新特性丈牢。
這個特性結合 Java 新的版本機制來看,就更有必要了垮卓,這么快的發(fā)布機制,如果老的方式碱呼,大家使用新版本特性簡直就會疲于奔命坝尥巍男旗!
多版本兼容 JAR 功能能讓你創(chuàng)建僅在特定版本的 Java 環(huán)境中運行庫程序時選擇使用的 class 版本:
multirelease.jar
├── META-INF
│ └── versions
│ └── 9
│ └── multirelease
│ └── Helper.class
├── multirelease
├── Helper.class
└── Main.class
4. 小升級
接口允許私有方法
對庫開發(fā)者是蠻有用的,進一步干掉多此一舉的 抽象類
public interface SayHi {
private String buildMessage() {
return "Hello";
}
void sayHi(final String message);
default void sayHi() {
sayHi(buildMessage());
}
}
升級 集合、Stream 和 Optional 接口
- 集合: 添加 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);
- 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);
}
- Collectors : 添加 filtering 和 flatMapping
- Optional :添加了 ifPresentOrElse晚碾、or 和 stream 等方法
升級 <>
//java6及以前
Map<String,String> map6 = new HashMap<String,String>();
//java7和8 <>沒有了數(shù)據(jù)類型
Map<String,String> map7 = new HashMap<>();
//java9 添加了匿名內部類的功能 后面添加了大括號{} 可以做一些細節(jié)的操作
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 最期待類型推導了。