1. 程式人生 > >最通俗易懂的 Java 11 新特性講解

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


大多數開發者還是沉浸在 Java 8 中,而 Java 14 將要在 2020 年 3 月 17 日釋出了,而我還在寫著 Java 11 的新特性。Java 11Java 8 之後的第一個 LTS 版本,但是也自從 Java 11 開始, Oracle JDK 不再可以免費的用於商業用途,當然如果你是個人使用,或者是使用 Open JDK ,那麼還是可以免費使用的。

有些人很關心 Java 11 是否收費,Oracle 表示除非你在生產中使用,否則可以不用收費。

即使收費,免費的 Open JDK 不也很香嗎。

可免費用於生產環境的 Open JDK 官網:https://jdk.java.net/11/

再 6 個月後,Java 15 都要來了,這種釋出節奏不僅讓人有點應接不暇,更有點眼花繚亂。但是不管怎麼說,發展的趨勢不可逆,所以補習一波 Java 11 也是很有必要的。

1. String API

字串絕對是 Java 中最常用的一個類了,String 類的方法使用率也都非常的高,在 Java 11 中又為 String 類帶來了一系列的好用操作。

  1. isBlank() 判空。

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

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

    // 複製字串
    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

讀寫檔案變得更加方便。

// 建立臨時檔案
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

3. JEP 321 - HTTP Client

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://openjdk.java.net/groups/net/httpclient/recipes-incubating.html

你現在還需要各種 HTTP Client 依賴包嗎?

4. JEP 323 - Lambda 區域性變數推斷

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 和其他變數型別混用。

5. JEP 330 - 單命令執行 Java

自從學習 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

6. 免費的飛行記錄器

商業版 JDK 中一直有一款低開銷的事件資訊收集工具,也就是飛行記錄器(Java Flight Recorder),它可以對 JVM 進行檢查、分析、記錄等。當出現未知異常時可以通過記錄進行故障分析。這個好用的工具在 Java 11 中將開源免費。所有人都可以使用這個功能了。

其他更新

  1. JEP 309 - 新增動態檔案常量。
  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 的實現。
  5. JEP 333 - 引入實驗性的 ZGC 垃圾收集器,保證停擺時間不會超過 10ms。
  6. JEP 335 - 廢棄 Nashorn JavaScript 引擎

文章案例都已經上傳到 Github:niumoo/jdk-feature

系列往期

  • 最通俗易懂的 Java 10 新特性講解
  • Jdk14 都要出了,Jdk9 的新特性還不瞭解一下?
  • 還看不懂同事的程式碼?
  • 超強的 Stream 流操作姿勢還不學習一下
  • 還看不懂同事的程式碼?Lambda 表示式、函式介面瞭解一下
  • Jdk14 都要出了,還不能使用 Optional優雅的處理空指標?
  • Jdk14 都要出了,Jdk8 的時間處理姿勢還不瞭解一下?
  • 還看不懂同事程式碼?快來補一波 Java 7 語法特性

<完>
這篇文章是我的原創文章。如果你也喜歡,可以關注公眾號【未讀程式碼】,不斷推送【原創文章】與你分享。

相關推薦

通俗易懂Java 11 特性講解

大多數開發者還是沉浸在 Java 8 中,而 Java 14 將要在 2020 年 3 月 17 日釋出了,而我還在寫著 Java 11 的新特性。Java 11 是 Java 8 之後的第一個 LTS 版本,但是也自從 Java 11 開始, Oracle JDK 不再可以免費的用於商業用途,當然如果你

通俗易懂Java 10 特性講解

自從 Java 9 開始,Oracle 調整了 Java 版本的釋出策略,不再是之前的 N 年一個大版本,取而代之的是 6 個月一個小版本,三年一個大版本,這樣可以讓 Java 的最新改變迅速上線,而小版本的維護週期縮短到下個版本釋出之前,大版本的維護週期則是 3 年之久。而 10 就是這麼一個小版本,因

[Java 11特性翻譯]JEP 332 Transport Layer Security (TLS) 1.3

1、寫在前面   本文是在個人學習過程中順手所得,非專業翻譯,文章末尾同步附上英文原版,請各位看官對照閱讀,非喜勿噴,謝謝! 2、翻譯內容 JEP 332 Transport Layer Security (TLS) 1.3  JDK11的release版本包含了對T

詳解 Java 11 特性, Java高階程式設計師必備

Java 11新特性的詳細解釋。JDK 11已經於 2018年9月25日正式釋出,那麼Java 11主要包含哪些新特性呢? JDK 11是Java SE 11平臺版本11的開源參考實現,由JSR 384在Java Community Process中指定。阿里巴巴是中國唯一的JCP委員會成員公司,參與Jav

Java 11 特性,Java程式設計師必備

Java JDK 11已經於 2018年9月25日正式釋出,那麼Java 11主要包含哪些新特性呢?JDK 11是Java SE 11平臺版本11的開源參考實現,由JSR 384在Java Community Process中指定。該版本的功能和時間表是通過JEP流程提出和跟蹤的,並由JEP 2.0提案進行了

Java 11特性解讀

概述 美國當地時間9月25日,Oracle 官方宣佈 Java 11 (18.9 LTS) 正式釋出,可在生產環境中使用!這是自 Java 8 後的首個長期支援版本,將支援到2026年,可以使用下面的地址進行下載: https://www.oracle.com/technetwork/java/

我見過通俗易懂的快速排序過程講解,轉自《坐在馬桶上看演算法:快速排序》

如果以上C程式碼看不懂,請看下面java程式碼: public static int Partition(int[] a,int p,int r){   int x=a[r-1];   int i=p-1;   int temp;   for(int j=p;j<=

可能是通俗易懂Java 位操作運算講解

Java 位操作這是一項很基礎很基礎的知識內容,在所有 Android 和 Java 開發者的學習之路上,大家都接觸過,但是實際運用的場景卻很少見,很多人估計都忘記有這個知識點了。事實上,在 C/C++ 開發領域因為與硬體的聯絡更緊密,所以位操作運算應用的更普遍

淺談Java泛型<通俗易懂講解>

一、概述 泛型在Java中有很重要的地位,在面相物件程式設計及各種設計模式中有非常廣泛的應用。 什麼是泛型?為什麼要使用泛型?

淺談java註解<通俗易懂講解>

Java註解用於為Java程式碼提供元資料。 元資料是指用來描述資料的資料,通俗一點,就是描述程式碼間關係,或者程式碼與其它資源(例如資料庫表)之間內在聯絡的資料。在一些技術框架中,如Struts、hibernate就不知不覺用到了元資料。對於Struts來說,元資料指的是struts-config.x

淺談java過濾器Filter<通俗易懂講解>

一、簡介 Servlet中的過濾器Filter是實現了javax.servlet.Filter介面的伺服器端程式,主要的用途是過

Java: 8/9/10/11 特性

根據開源中國9月份的投票,https://www.oschina.net/question/2918182_2287320 Java 8 是投票者最多使用的版本,其次是7,也有一部分開發人員表示跳過9與10嘗試Java 11 本文記錄一下8/9/10/11中的最主要的新特性以備後察

史上通俗易懂的YOLOv2講解

博主本來想自己寫一篇關於YOLOv2的論文筆記的,在找資料的過程中看到這篇天秀的部落格,就“據為己用”了。不得不出,很多大佬寫的都太深刻了,還是轉載比較舒服點~~~~~~ 本文轉自目標檢測|YOLOv2原理與實現(附YOLOv3)     

svm演算法 通俗易懂講解

  最近在學習svm演算法,藉此文章記錄自己的學習過程,在學習很多處借鑑了z老師的講義和李航的統計,若有不足的地方,請海涵;svm演算法通俗的理解在二維上,就是找一分割線把兩類分開,問題是如下圖三條顏色都可以把點和星劃開,但哪條線是最優的呢,這就是我們要考慮的問題; 首

深入理解Java中的回撥機制(通俗易懂的回撥機制的部落格)

1. 什麼是回撥? 在我看來,回撥其實是一個相當具有迷惑性的名字,因為它很容易讓人糾結於回撥這個詞語本身的含義,從而忽略了回撥這種機制的本質。要理解Java中的回撥概念,最好的方式不是通過例項,而是從回撥概念的起源說起。   最開始接觸回撥時在C語言中函式指

迄今為止通俗易懂的MVP架構講解

從MVC到MVP再到MVVP,相信大家就已經聽說過這些架構了。但你真正應用到哪個階段了呢?是不是還苦於網上對MVP晦澀的講解?今天,Coder哥就用最通俗易懂的方式告訴你,MVP怎麼用! 先上一張MVP結構圖。 接下來就一步步教你用: 1、首先把結構包

淺談lambda表示式<通俗易懂講解>

Java8釋出已經有一段時間了,這次釋出的改動比較大,很多人將這次改動與Java5的升級相提並論。Java8其中一個很重要的新特性

學妹問的Spring Bean常用配置,我用通俗易懂講解讓她學會了

你好呀,我是沉默王二,一枚有趣的程式設計師,寫的文章一直充滿靈氣,力求清新脫俗。昨天跑去王府井的小米店訂購了一臺小米 10,說是一週之內能到貨,但我還是忍不住今天就想見到她。見我茶不思飯不想的,老婆就勸我說,與其在瞎想,還不如滾去寫你的文章。於是就有了今天這篇“Spring Bean 的常用配置”,通過我和三

Java 5/Java 6/Java7/Java 8特性收集

lan 鏈接 develop new strong tar chrom eve ref 前言: Java 8對應的JDK版本為JDK8,而官網下載回來安裝的時候,文件夾上寫的是JDK1.8,同一個意思。(而這個版本命名也是有規律的,以此類推) 一、Java 5 1、h

Java 8 特性1-函數式接口

實例 his sys subject 生成 license object類 acc class類 Java 8 新特性1-函數式接口 (原) Lambda表達式基本結構: (param1,param2,param3) -> {代碼塊} 例1: package