JDK14的新特性-Switch新功能


    2020年3月17日,Oracle正式發布了JDK14版本,共新增了16項新特性

    本文重點寫一下關於switch的新功能:

     switch 表達式擴展了 switch 語句,使其不僅可以作為語句(statement),還可以作為表達式(expression),並且兩種寫法都可以使用傳統的 switch 語法,或者使用簡化的“case L ->”模式匹配語法作用於不同范圍並控制執行流。

JDK14之前的switch寫法:

public class SwitchTest {
    public static void main(String[] args) {
        Weekday day = Weekday.MON; //初始化一個枚舉變量
        //case L:標簽具有貫穿功能
        switch (day){
            case MON:
            case TUE:
            case WEN:
                String s = ""; //這個標簽中定義的局部變量在整個switch全部有效 再定義會報錯:重復定義
                System.out.println("上半周");
                break;
            case THU:
            case FRI:
                String s = ""; //重復定義報錯
                System.out.println("下半周");
            case SAT:
            case SUN:
                System.out.println("周末");
        }
        System.out.println("12");


}
//定義枚舉
enum Weekday{
    MON,TUE,WEN,THU,FRI,SAT,SUN
}

運行結果:
上半周
12
傳統寫法需要使用break來避免case貫穿
 
1.case L -> 標簽取消了貫穿功能 case后面的常量可以使用逗號來分割多個常量
看下代碼
public class SwitchTest {
    public static void main(String[] args) {
        Weekday day = Weekday.MON; //初始化一個枚舉變量
        //case L:標簽具有貫穿功能
        switch (day){//不需要break;
            case MON, TUE, WEN -> {
                System.out.println("上半周");
                String s = "abc"; //局部變量只在當前代碼塊有效
            }
            case THU, FRI      -> {
                System.out.println("下半周");
                String s = "def";
            }
            case SAT, SUN      -> {
                System.out.println("周末");
            }
        }
        System.out.println("12");
}

//定義枚舉
enum Weekday{
    MON,TUE,WEN,THU,FRI,SAT,SUN
}
運行結果:
上半周
12
 
        
2.JDK14中擴展了switch可以作為表達式進行賦值或打印操作
 
public class SwitchTest {
    public static void main(String[] args) {
        Weekday day = Weekday.MON; //初始化一個枚舉變量

        //JDK14中擴展了switch可以作為表達式
        //將表達式的值打印出來
        System.out.println(switch(day){
            case MON, TUE, WEN -> "上半周";
            case THU, FRI      -> "下半周";
            case SAT, SUN      -> "周末";
        });

        //將表達式的值賦值給一個變量
        String text = switch(day){
            case MON, TUE, WEN -> "上半周";
            case THU, FRI      -> "下半周";
            case SAT, SUN      -> "周末";
        };

        //通過yield產生一個新的值
        day = Weekday.SAT;
        int x = switch(day){
            case MON, TUE, WEN -> 1;
            case THU, FRI      -> 2;
            case SAT, SUN      -> {
                int rnd = (int)(Math.random()*10);  //生成一個(0,10)內的隨機整數
                System.out.println("rnd = " + rnd);
                yield rnd;  //通過yield產生一個新的值
            };
        };

        System.out.println("x = " + x);
    }
}

//定義枚舉
enum Weekday{
    MON,TUE,WEN,THU,FRI,SAT,SUN
}



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM