Java 13 新特性及實戰案例

近期 Java 界好消息頻傳。先是 Java 13 發佈,接着 Eclipse 也發佈了新版本表示支持新版本的Java 特性。 本文介紹了 Java 13 的新特性並展現了相關的示例。html

2019年9月17日,Java 13 正式發佈。特性以下。java

Java 13 新特性

此版本帶來了如下幾大新特性:git

  • JEP 350,Dynamic CDS Archives:擴展應用程序類-數據共享,以容許在 Java 應用程序執行結束時動態歸檔類。歸檔類將包括默認的基礎層 CDS(class data-sharing)存檔中不存在的全部已加載的應用程序類和庫類。
  • JEP 351,ZGC: Uncommit Unused Memory:加強 ZGC 以將未使用的堆內存返回給操做系統。
  • JEP 353,Reimplement the Legacy Socket API:使用易於維護和調試的更簡單、更現代的實現替換 java.net.Socket 和 java.net.ServerSocket API 使用的底層實現。
  • JEP 354,Switch Expressions (Preview):可在生產環境中使用的 switch 表達式,JDK 13 中將帶來一個 beta 版本實現。switch 表達式擴展了 switch 語句,使其不只能夠做爲語句(statement),還能夠做爲表達式(expression),而且兩種寫法均可以使用傳統的 switch 語法,或者使用簡化的「case L ->」模式匹配語法做用於不一樣範圍並控制執行流。這些更改將簡化平常編碼工做,併爲 switch 中的模式匹配(JEP 305)作好準備。
  • JEP 355,Text Blocks (Preview):將文本塊添加到 Java 語言。文本塊是一個多行字符串文字,它避免了對大多數轉義序列的須要,以可預測的方式自動格式化字符串,並在須要時讓開發人員控制格式。

安裝 JDK 13

JDK 13下載地址爲 https://www.oracle.com/technetwork/java/javase/downloads/index.htmlgithub

以Windows環境爲例,可經過jdk-13_windows-x64_bin.exe或jdk-13_windows-x64_bin.zip來進行安裝。 .exe文件的安裝方式較爲簡單,按照界面提示點擊「下一步」便可。express

下面演示.zip安裝方式。windows

1. 解壓.zip文件到指定位置

將jdk-13_windows-x64_bin.zip文件解壓到指定的目錄下便可。好比,本例子放置在了D:\Program Files\jdk-13位置。oracle

2. 設置環境變量

建立系統變量「JAVA_HOME」,其值指向了JDK的安裝目錄。eclipse

系統變量

在用戶變量「Path」中,增長「%JAVA_HOME%\bin」。ui

用戶變量

注:JDK13已經無需再安裝JRE,設置環境變量時也不用設置CLASSPATH了。編碼

3. 驗證安裝

執行「java -version」命令進行安裝的驗證:

$ java -version
java version "13" 2019-09-17
Java(TM) SE Runtime Environment (build 13+33)
Java HotSpot(TM) 64-Bit Server VM (build 13+33, mixed mode, sharing)

若是現實上述信息,則說明JDK已經安裝完成。

若是顯示的內容仍是安裝前的老JDK版本,則可按照以下步驟解決。

首先,卸載老版本的JDK

卸載老版本JDK

其次,在命令行輸入以下指令來設置JAVA_HOM和Path:

>SET JAVA_HOME=D:\Program Files\jdk-13

>SET Path=%JAVA_HOME%\bin

Eclipse IDE 2019-09

在 Java 13 發佈兩天後的2019年9月19日,Eclipse IDE 2019-09 發佈。Eclipse IDE 2019-09 聲稱支持Java 13。接下里將演示如何使用Eclipse IDE 2019-09編寫 Java 13 的示例。

Eclipse IDE 2019-09 下載地址爲 https://www.eclipse.org/downloads/packages/。本例使用的是Eclipse 4.14版本。

編寫 Java 13 示例

實戰1:Switch表達式的例子

下面是原有的Switch表達式的寫法:

switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        System.out.println(6);
        break;
    case TUESDAY:
        System.out.println(7);
        break;
    case THURSDAY:
    case SATURDAY:
        System.out.println(8);
        break;
    case WEDNESDAY:
        System.out.println(9);
        break;
}

在Java 12中,Switch表達式能夠改成以下寫法:

switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
    case TUESDAY                -> System.out.println(7);
    case THURSDAY, SATURDAY     -> System.out.println(8);
    case WEDNESDAY              -> System.out.println(9);
}

還能支持在表達式中返回值:

int numLetters = switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> 6;
    case TUESDAY                -> 7;
    case THURSDAY, SATURDAY     -> 8;
    case WEDNESDAY              -> 9;
};

在Java 13中,Switch表達式能夠改成以下寫法:

int date = switch (day) {
	case MONDAY, FRIDAY, SUNDAY : yield 6;
	case TUESDAY                : yield 7;
	case THURSDAY, SATURDAY     : yield 8;
	case WEDNESDAY              : yield 9;
	default 					: yield 1; // default條件是必須的
};

System.out.println(date);

須要注意的是,在使用yield時,必需要有default條件。

實戰2:文本塊

自Java 13開始,支持文本塊(Text Blocks)。

如下是Java 13以前的文本塊的處理方式的示例:

String html = "<html>\n" +
	              "    <body>\n" +
	              "        <p>Hello, world</p>\n" +
	              "    </body>\n" +
	              "</html>\n";

System.out.println(html);

在上述示例中,因爲文本塊須要換行,因此產生了不少本文的拼接和轉義。

如下是Java 13中的文本塊示例:

String html2 = """
	              <html>
	                  <body>
	                      <p>Hello, world</p>
	                  </body>
	              </html>
	              """;
	    
System.out.println(html2);

在上述示例中,對於文本塊的處理變得簡潔、天然。

以上兩個示例在控制檯輸出內容都是同樣的,效果以下:

<html>
    <body>
        <p>Hello, world</p>
    </body>
</html>

更多Java示例,可見「現代Java案例大全」。

參考引用

相關文章
相關標籤/搜索