switch表達式
switch表達式是Java 12開始就提供的預覽特性,到了Java 13仍然沒有被轉正。此特性可以把switch的執行結果組合到復合表達式中進行運算。
import java.time.Year;
public class SwitchExpressionsDemo {
public static void main(String[] args) {
int year = 2012;
int month = 2;
// 把某月的天數與24和60相乘,得到此月份的分鍾數
int minutes = 24 * switch (month) {
case 1, 3, 5, 7, 8, 10, 12 -> 31;
case 4, 6, 9, 11 -> 30;
case 2 -> Year.isLeap(year) ? 29 : 28;
default -> throw new IllegalArgumentException("月份應在1~12區間內取值");
} * 60;
System.out.printf("%d年%d月有%d分鍾", year, month, minutes);
}
}
使用以下命令進行編譯:
D:\>javac --enable-preview -source 13 -encoding utf-8 .\SwitchExpressionsDemo.java
注: .\SwitchExpressionsDemo.java 使用預覽語言功能。
注: 有關詳細信息,請使用 -Xlint:preview 重新編譯。
使用以下命令執行程序:
D:\>java --enable-preview SwitchExpressionsDemo
2012年2月有41760分鍾
文本塊(多行字符串)
從Java 13開始支持文本塊(多行字符串),可以替代從前丑陋的多行字符串拼接。此特性目前也是預覽特性。
public class MultiLinesStringDemo {
public static void main(String[] args) {
// 使用"""..."""可以聲明一個文本塊
String multiLinesString = """
學海孤帆遠
書山崎路長
玉顏千鍾粟
長留萬古芳""";
// 直接在控制台輸出文本塊
System.out.println(multiLinesString);
System.out.println("----------- 分割線 -----------");
// 使用String類的lines()方法得到一個Stream對象,處理並輸出其中的每個元素
// Stream中的元素由文本塊中的每一行子串構成
multiLinesString.lines().map(s -> s + "!!!!!").forEach(System.out::println);
}
}
使用以下命令進行編譯:
D:\>javac --enable-preview -source 13 -encoding utf-8 .\MultiLinesStringDemo.java
注: .\MultiLinesStringDemo.java 使用預覽語言功能。
注: 有關詳細信息,請使用 -Xlint:preview 重新編譯。
使用以下命令執行程序:
D:\>java --enable-preview MultiLinesStringDemo
學海孤帆遠
書山崎路長
玉顏千鍾粟
長留萬古芳
----------- 分割線 -----------
學海孤帆遠!!!!!
書山崎路長!!!!!
玉顏千鍾粟!!!!!
長留萬古芳!!!!!