距離 2019 年結束,只剩下 30 幾天了。你作好準備迎接 2020 年了嗎?html
一到年末,人就特別容易陷入回憶和比較之中,好比說這幾天, 的對比挑戰就火了!java
這個話題登上了微博的熱搜榜,也刷爆了朋友圈,人們紛紛曬出本身2017和2019的照片對比。算法
做爲一個技術宅,我也作了一個對比:express
2017 年 9 月 21 日,Java 9 正式發佈,而且在2017年8月,JCP執行委員會提出將Java的發佈頻率改成每六個月一次,新的發佈週期嚴格遵循時間點,將在每一年的3月份和9月份發佈。編程
Java 9 於 2017 年 9 月 22 日正式發佈,帶來了不少新特性,其中最主要的變化是已經實現的模塊化系統。安全
主要特性:服務器
Java 10 於 2018 年3 月21 日正式發佈,這是做爲當今使用最普遍的編程語言之一的Java 語言的第十個大版本。編程語言
主要特性:模塊化
Java 11 於 2018 年9 月25 日正式發佈,可在生產環境中使用!這是自 Java 8 後的首個長期支持版本,將支持到2026年。函數式編程
主要特性:
Java 12 於 2019 年3 月 19 日正式發佈,自Java 11 這一Long Term Support 版本發佈以後半年的又一次版本更新
主要特性:
Java 13 於 2019 年 9 月 17 日正式發佈,這一版本中引入了文本塊等功能。
主要特性:
一、本地變量類型推斷
在之前的版本中,咱們想定義定義局部變量時。咱們須要在賦值的左側提供顯式類型,並在賦值的右邊提供實現類型,以下面的片斷所示:
MyObject value = new MyObject();
List list = new ArrayList();
複製代碼
在Java 10中,你能夠這樣定義對象:
var value = new MyObject();
var list = new ArrayList();
複製代碼
正如你所看到的,本地變量類型推斷將引入「var」關鍵字,而不須要顯式的規範變量的類型。
switch表達式
在JDK 12中引入了Switch表達式做爲預覽特性。在Java 13中又修改了這個特性,引入了yield語句,用於返回值。這意味着,switch表達式(返回值)應該使用yield, switch語句(不返回值)應該使用break。
在之前,咱們想要在switch中返回內容,仍是比較麻煩的,通常語法以下:
int i;
switch (x) {
case "1":
i=1;
break;
case "2":
i=2;
break;
default:
i = x.length();
break;
}
複製代碼
在JDK13中使用如下語法:
int i = switch (x) {
case "1" -> 1;
case "2" -> 2;
default -> {
int len = args[1].length();
yield len;
}
};
複製代碼
或者
int i = switch (x) {
case "1": yield 1;
case "2": yield 2;
default: {
int len = args[1].length();
yield len;
}
};
複製代碼
三、文本塊支持
text block,文本塊,是一個多行字符串文字,它避免了對大多數轉義序列的須要,以可預測的方式自動格式化字符串,並在須要時讓開發人員控制格式。
咱們之前從外部copy一段文本串到Java中,會被自動轉義,若有一段如下字符串:
<html>
<body>
<p>Hello, world</p>
</body>
</html>
複製代碼
將其複製到Java的字符串中,會展現成如下內容:
"<html>\n" +
" <body>\n" +
" <p>Hello, world</p>\n" +
" </body>\n" +
"</html>\n";
複製代碼
即被自動進行了轉義,這樣的字符串看起來不是很直觀,在JDK 13中,就可使用如下語法了:
"""
<html>
<body>
<p>Hello, world</p>
</body>
</html>
""";
複製代碼
使用「」「做爲文本塊的開始符合結束符,在其中就能夠放置多行的字符串,不須要進行任何轉義。看起來就十分清爽了。
從2017到2019,不果短短兩年時間,Java就發佈了5個版本。每一個版本都會有不少特性出來,這些特性中雖然沒有像Java 8那樣提供函數式編程這樣的重大改變,可是也提供了switch表達式和block text等你們期待已久的特性。
2年過去了,在Java學習的道路上,你進步了嗎?歡迎談談你這兩年的變化。