Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤和異常

Java 多執行緒

Java 同步

Java 網路

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java API 和框架

Java 類參考

Java 有用資源

Java - Switch 表示式



使用**switch 表示式**,我們可以返回值,並且可以在像其他表示式一樣的語句中使用它們。我們可以使用**case L -> label** 返回值,或者使用 yield,我們可以從 switch 表示式返回值。

Java 12 引入了**表示式到Switch 語句** 並將其作為預覽功能釋出。Java 13 添加了一個新的 yield 構造來從 switch 語句返回值。在 Java 14 中,**switch 表示式**現在是一個標準特性。

  • 每個 case 塊都可以使用 yield 語句返回值。

  • 在列舉的情況下,可以跳過 default case。在其他情況下,需要 default case。

使用“case L ->”標籤的 Switch 表示式

Java 提供了一種使用 case L - > 符號從 switch 表示式返回值的新方法。

語法

case label1, label2, ..., labeln -> expression;|throw-statement;|block 

其中 label1 到 labeln 代表要比較的各種值,我們可以使用 expression,一個語句來返回值或丟擲表示式。

一旦 Java 執行時將左側塊中的任何標籤與箭頭匹配,它就會移動到箭頭的右側塊並執行表示式(語句)並返回結果。

Switch 表示式示例:使用 case L -> 標籤

在這個例子中,我們比較了 switch 表示式與 switch 語句。getDayType() 方法接受一個字串輸入,並透過評估 switch 表示式並返回值來返回相應的條目。而 getDayTypeOldStyle() 方法使用 switch 語句來比較每個 case,使用 break 語句來結束 switch case,並且要獲取值,我們需要在變數中設定值。

package com.tutorialspoint;

public class SwitchTester {
   public static void main(String[] args) {
      System.out.println("Old Switch");
      System.out.println(getDayTypeOldStyle("Monday"));
      System.out.println(getDayTypeOldStyle("Saturday"));
      System.out.println(getDayTypeOldStyle(""));

      System.out.println("New Switch");
      System.out.println(getDayType("Monday"));
      System.out.println(getDayType("Saturday"));
      System.out.println(getDayType(""));   
   }
  
   public static String getDayType(String day) {
      // evaluate switch expression and get a value 
      return switch (day) {
         case "Monday", "Tuesday", "Wednesday","Thursday", "Friday" -> "Weekday";
         case "Saturday", "Sunday" -> "Weekend";
         default -> "Invalid day.";
      };
   }

   public static String getDayTypeOldStyle(String day) {
      String result = null;
	  // evaluate relevant cases and get a value into result variable 
      switch (day) {
         case "Monday":
         case "Tuesday":
         case "Wednesday":
         case "Thursday":
         case "Friday":
            result = "Weekday";
            break;
         case "Saturday": 
         case "Sunday":
            result = "Weekend";
            break;
         default:
            result =  "Invalid day.";            
      }
      return result;
   }
}

輸出

讓我們編譯並執行上述程式,這將產生以下結果:

Old Switch
Weekday
Weekend
Invalid day.
New Switch
Weekday
Weekend
Invalid day.

使用“case L:”語句和 yield 語句的 Switch 表示式

在 java 中,我們可以使用 yield 語句從 switch 表示式和 switch 語句中獲取值。yield 語句返回值並結束 switch 執行。

語法

case label1, label2, ..., labeln -> expression; yield value;

case label1:
case labeln: expression; 
   yield value;

Switch 表示式示例:使用“case L:”語句和 yield 語句

其中 label1 到 labeln 代表要比較的各種值,我們可以使用 expression 執行操作並使用 yield 語句返回值。

在這個例子中,我們比較了使用 yield 語句的 switch 表示式。getDayType() 方法使用帶 yield 語句的 switch 表示式來獲取結果,而 getDayTypeStyle1() 方法使用帶冒號 (:) 符號的 switch case 和 yield 語句來獲取所需的結果。

package com.tutorialspoint;

public class SwitchTester {
   public static void main(String[] args) {
      System.out.println("Old Way");
      System.out.println(getDayTypeStyle2("Monday"));
      System.out.println(getDayTypeStyle2("Saturday"));
      // System.out.println(getDayTypeStyle2(""));

      System.out.println("New Way");
      System.out.println(getDayType("Monday"));
      System.out.println(getDayType("Saturday"));
      System.out.println(getDayType(""));
   }

   public static String getDayType(String day) {
      return switch (day) {
         // we can use block statements to return a value using yield after 
         // executing other statements		 
         case "Monday", "Tuesday", "Wednesday","Thursday", "Friday" -> {
            System.out.println("In Weekdays");
            yield "Weekday"; 
         }
         case "Saturday", "Sunday" -> { 
            System.out.println("In Weekends");
            yield "Weekend"; 
         }
         default -> throw new IllegalStateException("Invalid day: " + day);
      };
   }

   public static String getDayTypeStyle2(String day) {
      return switch (day) {
         case "Monday":
         case "Tuesday":
         case "Wednesday":
         case "Thursday":
         case "Friday":
            yield "Weekday";           
         case "Saturday": 
         case "Sunday":
            yield "Weekend";
         default:
            throw new IllegalStateException("Invalid day: " + day);         
      };
   }
}

輸出

讓我們編譯並執行上述程式,這將產生以下結果:

Old Way
Weekday
Weekend
New Ways
In Weekdays
Weekday
In Weekends
Weekend
Exception in thread "main" java.lang.IllegalStateException: Invalid day: 
	at com.tutorialspoint.SwitchTester.getDayType(SwitchTester.java:26)
	at com.tutorialspoint.SwitchTester.main(SwitchTester.java:13)
廣告