大多數(shù)開(kāi)發(fā)者還是沉浸在
Java 8
中原茅,而 Java 14
將要在 2020 年 3 月 17 日發(fā)布了揣非,而我還在寫著 Java 11
的新特性她渴。Java 11
是 Java 8
之后的第一個(gè) LTS 版本达址,但是也自從 Java 11
開(kāi)始, Oracle JDK 不再可以免費(fèi)的用于商業(yè)用途趁耗,當(dāng)然如果你是個(gè)人使用沉唠,或者是使用 Open JDK ,那么還是可以免費(fèi)使用的苛败。
有些人很關(guān)心
Java 11
是否收費(fèi)满葛,Oracle 表示除非你在生產(chǎn)中使用,否則可以不用收費(fèi)著拭。即使收費(fèi)纱扭,免費(fèi)的 Open JDK 不也很香嗎。
可免費(fèi)用于生產(chǎn)環(huán)境的 Open JDK 官網(wǎng):https://jdk.java.net/11/
再 6 個(gè)月后儡遮,Java 15
都要來(lái)了乳蛾,這種發(fā)布節(jié)奏不僅讓人有點(diǎn)應(yīng)接不暇,更有點(diǎn)眼花繚亂鄙币。但是不管怎么說(shuō)肃叶,發(fā)展的趨勢(shì)不可逆,所以補(bǔ)習(xí)一波 Java 11
也是很有必要的十嘿。
1. String API
字符串絕對(duì)是 Java 中最常用的一個(gè)類了因惭,String 類的方法使用率也都非常的高,在 Java 11
中又為 String 類帶來(lái)了一系列的好用操作绩衷。
-
isBlank() 判空蹦魔。
// 判空,blank里我放入了全角空格咳燕,半角空格勿决,TAB String blank = " "; System.out.println(blank.isBlank()); // 輸出 // true
-
lines() 分割獲取字符串流。
// lines 返回一個(gè) Stream String line = "a\nb\nc"; Stream<String> lines = line.lines(); // 使用 lambda 遍歷 lines.forEach(System.out::println); // 輸出 // a // b // c
-
repeat() 復(fù)制字符串
// 復(fù)制字符串 String repeat = "我的微信:wn8398,"; String repeat3 = repeat.repeat(3); System.out.println(repeat3); // 輸出 // 我的微信:wn8398,我的微信:wn8398,我的微信:wn8398,
-
strip() 去除前后空白字符招盲。
// 去除前后空白 String strip = " https://www.wdbyte.com "; System.out.println("==" + strip.trim() + "=="); // 去除前后空白字符低缩,如全角空格,TAB System.out.println("==" + strip.strip() + "=="); // 去前面空白字符曹货,如全角空格咆繁,TAB System.out.println("==" + strip.stripLeading() + "=="); // 去后面空白字符,如全角空格顶籽,TAB System.out.println("==" + strip.stripTrailing() + "=="); // 輸出 // == https://www.wdbyte.com == // ==https://www.wdbyte.com== // ==https://www.wdbyte.com == // == https://www.wdbyte.com==
這里注意玩般,
trim
只能去除半角空格,而strip
是去除各種空白符礼饱。
2. File API
讀寫文件變得更加方便壤短。
// 創(chuàng)建臨時(shí)文件
Path path = Files.writeString(Files.createTempFile("test", ".txt"), "https://www.wdbyte.com");
System.out.println(path);
// 讀取文件
// String ss = Files.readString(Path.of("file.json"));
String s = Files.readString(path);
System.out.println(s);
// 結(jié)果
// https://www.wdbyte.com
3. JEP 321 - HTTP Client
在 Java 11
中 Http Client API 得到了標(biāo)準(zhǔn)化的支持设拟。且支持 HTTP/1.1 和 HTTP/2 ,也支持 websockets久脯。
你可以像這樣發(fā)起一個(gè)請(qǐng)求。
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.hao123.com"))
.build();
// 異步
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
// 同步
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
更多的如同步異步請(qǐng)求镰吆,并發(fā)訪問(wèn)帘撰,設(shè)置代理等方式,可以參考 OpenJDK 官方文檔万皿。
http://openjdk.java.net/groups/net/httpclient/recipes-incubating.html
你現(xiàn)在還需要各種 HTTP Client 依賴包嗎摧找?
4. JEP 323 - Lambda 局部變量推斷
在 Java 10
中引入了 var
語(yǔ)法,可以自動(dòng)推斷變量類型牢硅。在 Java 11
中這個(gè)語(yǔ)法糖可以在 Lambda 表達(dá)式中使用了蹬耘。
var hashMap = new HashMap<String, Object>();
hashMap.put("wechat", "wn8398");
hashMap.put("website", "https://www.wdbyte.com");
hashMap.forEach((var k, var v) -> {
System.out.println(k + ": " + v);
});
這里需要注意的是,(var k,var v)
中减余,k 和 v 的類型要么都用 var 综苔,要么都不寫,要么都寫正確的變量類型位岔。而不能 var 和其他變量類型混用如筛。
5. JEP 330 - 單命令運(yùn)行 Java
自從學(xué)習(xí) Java 的第一天,我們就知道運(yùn)行一個(gè) Java 文件抒抬,要先用 javac
命令編譯杨刨,再用 java
命令運(yùn)行,而現(xiàn)在只要一個(gè) java
命令就可以運(yùn)行了擦剑。
$ cat Main.java
public class Main {
public static void main(String[] args) {
System.out.println("wechat:wn8398");
}
}
$ java Main.java
wechat:wn8398
6. 免費(fèi)的飛行記錄器
商業(yè)版 JDK 中一直有一款低開(kāi)銷的事件信息收集工具妖胀,也就是飛行記錄器(Java Flight Recorder),它可以對(duì) JVM 進(jìn)行檢查惠勒、分析赚抡、記錄等。當(dāng)出現(xiàn)未知異常時(shí)可以通過(guò)記錄進(jìn)行故障分析捉撮。這個(gè)好用的工具在 Java 11
中將開(kāi)源免費(fèi)怕品。所有人都可以使用這個(gè)功能了。
其他更新
- JEP 309 - 添加動(dòng)態(tài)文件常量巾遭。
- JEP 318 - 添加 Epsilon 垃圾收集器肉康。
- JEP 320 - 刪除 Java EE 和 corba 模塊(java.xml.ws, java.xml.bind, java.activation, java.xml.ws.annotation, java.corba, java.transaction, java.se.ee, jdk.xml.ws, jdk.xml.bind)。
- JEP 329 - 增加加密算法 chacha20,poly1305 的實(shí)現(xiàn)灼舍。
- JEP 333 - 引入實(shí)驗(yàn)性的 ZGC 垃圾收集器吼和,保證停擺時(shí)間不會(huì)超過(guò) 10ms。
- JEP 335 - 廢棄 Nashorn JavaScript 引擎
文章案例都已經(jīng)上傳到 Github:niumoo/jdk-feature
系列往期
- 最通俗易懂的 Java 10 新特性講解
- Jdk14 都要出了骑素,Jdk9 的新特性還不了解一下炫乓?
- 還看不懂同事的代碼?
- 超強(qiáng)的 Stream 流操作姿勢(shì)還不學(xué)習(xí)一下
- 還看不懂同事的代碼?Lambda 表達(dá)式末捣、函數(shù)接口了解一下
- Jdk14 都要出了侠姑,還不能使用 Optional優(yōu)雅的處理空指針?
- Jdk14 都要出了箩做,Jdk8 的時(shí)間處理姿勢(shì)還不了解一下莽红?
- 還看不懂同事代碼?快來(lái)補(bǔ)一波 Java 7 語(yǔ)法特性
<完>
這篇文章是我的原創(chuàng)文章邦邦。如果你也喜歡安吁,可以關(guān)注公眾號(hào)【未讀代碼】,不斷推送【原創(chuàng)文章】與你分享燃辖。
[圖片上傳失敗...(image-90d09c-1583197041564)]