最通俗易懂的 Java 11 新特性講解


大多數(shù)開(kāi)發(fā)者還是沉浸在 Java 8 中原茅,而 Java 14 將要在 2020 年 3 月 17 日發(fā)布了揣非,而我還在寫著 Java 11 的新特性她渴。Java 11Java 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)了一系列的好用操作绩衷。

  1. isBlank() 判空蹦魔。

    // 判空,blank里我放入了全角空格咳燕,半角空格勿决,TAB
    String blank = "    ";
    System.out.println(blank.isBlank());
    
    // 輸出
    // true
    
  2. lines() 分割獲取字符串流。

    // lines 返回一個(gè) Stream
    String line = "a\nb\nc";
    Stream<String> lines = line.lines();
    // 使用 lambda 遍歷
    lines.forEach(System.out::println);
    
    // 輸出
    // a
    // b
    // c
    
  3. repeat() 復(fù)制字符串

    // 復(fù)制字符串
    String repeat = "我的微信:wn8398,";
    String repeat3 = repeat.repeat(3);
    System.out.println(repeat3);
    
    // 輸出
    // 我的微信:wn8398,我的微信:wn8398,我的微信:wn8398,
    
  4. 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 和其他變量類型混用如筛。

Lambda 中 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è)功能了。

其他更新

  1. JEP 309 - 添加動(dòng)態(tài)文件常量巾遭。
  2. JEP 318 - 添加 Epsilon 垃圾收集器肉康。
  3. 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)。
  4. JEP 329 - 增加加密算法 chacha20,poly1305 的實(shí)現(xiàn)灼舍。
  5. JEP 333 - 引入實(shí)驗(yàn)性的 ZGC 垃圾收集器吼和,保證停擺時(shí)間不會(huì)超過(guò) 10ms。
  6. JEP 335 - 廢棄 Nashorn JavaScript 引擎

文章案例都已經(jīng)上傳到 Github:niumoo/jdk-feature

系列往期

<完>

這篇文章是我的原創(chuàng)文章邦邦。如果你也喜歡安吁,可以關(guān)注公眾號(hào)【未讀代碼】,不斷推送【原創(chuàng)文章】與你分享燃辖。
[圖片上傳失敗...(image-90d09c-1583197041564)]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鬼店,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子黔龟,更是在濱河造成了極大的恐慌妇智,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捌锭,死亡現(xiàn)場(chǎng)離奇詭異俘陷,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)观谦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門拉盾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人豁状,你說(shuō)我怎么就攤上這事捉偏。” “怎么了泻红?”我有些...
    開(kāi)封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵夭禽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我谊路,道長(zhǎng)讹躯,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任缠劝,我火速辦了婚禮潮梯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惨恭。我一直安慰自己秉馏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布脱羡。 她就那樣靜靜地躺著萝究,像睡著了一般免都。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上帆竹,一...
    開(kāi)封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天绕娘,我揣著相機(jī)與錄音,去河邊找鬼馆揉。 笑死业舍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的升酣。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼态罪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼噩茄!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起复颈,我...
    開(kāi)封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤绩聘,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后耗啦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凿菩,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年帜讲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衅谷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡似将,死狀恐怖获黔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情在验,我是刑警寧澤玷氏,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站腋舌,受9級(jí)特大地震影響盏触,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜块饺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一赞辩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧刨沦,春花似錦诗宣、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)岛心。三九已至,卻和暖如春篮灼,著一層夾襖步出監(jiān)牢的瞬間忘古,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工诅诱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留髓堪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓娘荡,卻偏偏與公主長(zhǎng)得像干旁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子炮沐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361