Java 8
中,而
Java 14
將要在 2020 年 3 月 17 日發佈了,而我還在寫着
Java 11
的新特性。
Java 11
是
Java 8
以後的第一個 LTS 版本,可是也自從
Java 11
開始, Oracle JDK 再也不能夠免費的用於商業用途,固然若是你是我的使用,或者是使用 Open JDK ,那麼仍是能夠無償使用的。
有些人很關心
Java 11
是否收費,Oracle 表示除非你在生產中使用,不然能夠不用收費。html即便收費,免費的 Open JDK 不也很香嗎。java
可免費用於生產環境的 Open JDK 官網:jdk.java.net/11/git
再 6 個月後,Java 15
都要來了,這種發佈節奏不只讓人有點目不暇接,更有點眼花繚亂。可是無論怎麼說,發展的趨勢不可逆,因此補習一波 Java 11
也是頗有必要的。github
字符串絕對是 Java 中最經常使用的一個類了,String 類的方法使用率也都很是的高,在 Java 11
中又爲 String 類帶來了一系列的好用操做。web
isBlank() 判空。算法
// 判空,blank裏我放入了全角空格,半角空格,TAB
String blank = "   ";
System.out.println(blank.isBlank());
// 輸出
// true
複製代碼
lines() 分割獲取字符串流。shell
// lines 返回一個 Stream
String line = "a\nb\nc";
Stream<String> lines = line.lines();
// 使用 lambda 遍歷
lines.forEach(System.out::println);
// 輸出
// a
// b
// c
複製代碼
repeat() 複製字符串json
// 複製字符串
String repeat = "個人微信:wn8398,";
String repeat3 = repeat.repeat(3);
System.out.println(repeat3);
// 輸出
// 個人微信:wn8398,個人微信:wn8398,個人微信:wn8398,
複製代碼
strip() 去除先後空白字符。bash
// 去除先後空白
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
是去除各類空白符。微信
讀寫文件變得更加方便。
// 建立臨時文件
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);
// 結果
// https://www.wdbyte.com
複製代碼
在 Java 11
中 Http Client API 獲得了標準化的支持。且支持 HTTP/1.1 和 HTTP/2 ,也支持 websockets。
你能夠像這樣發起一個請求。
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());
複製代碼
更多的如同步異步請求,併發訪問,設置代理等方式,能夠參考 OpenJDK 官方文檔。
你如今還須要各類 HTTP Client 依賴包嗎?
在 Java 10
中引入了 var
語法,能夠自動推斷變量類型。在 Java 11
中這個語法糖能夠在 Lambda 表達式中使用了。
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 和其餘變量類型混用。
自從學習 Java 的第一天,咱們就知道運行一個 Java 文件,要先用 javac
命令編譯,再用 java
命令運行,而如今只要一個 java
命令就能夠運行了。
$ cat Main.java
public class Main {
public static void main(String[] args) {
System.out.println("wechat:wn8398");
}
}
$ java Main.java
wechat:wn8398
複製代碼
商業版 JDK 中一直有一款低開銷的事件信息收集工具,也就是飛行記錄器(Java Flight Recorder),它能夠對 JVM 進行檢查、分析、記錄等。當出現未知異常時能夠經過記錄進行故障分析。這個好用的工具在 Java 11
中將開源免費。全部人均可以使用這個功能了。
文章案例都已經上傳到 Github:niumoo/jdk-feature
<完>
這篇文章是個人原創文章。若是你也喜歡,能夠關注公衆號【未讀代碼】,不斷推送【原創文章】與你分享。