IT兄弟連 Java語法教程 流程式控制制語句 分支結構語句5

  • 2019 年 10 月 5 日
  • 筆記

版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/ITXDL123/article/details/95938136

5 switch-case條件語句

Java中的第二種分支控制語句時switch語句,switch語句提供了多路支援,因此可以使程式在多個選項中進行選擇。儘管一系列嵌套if語句可以執行多路測試,然而多數情況下使用switch則更為高效。其完整形式如下:

switch(expression){

case constant1:

statement sequence;

break;

case constan2:

statement sequence;

break;

default:

statement sequence;

}

對於JDK7之前的Java版本,switch表達式必須是byte、short、int、char類型或枚舉。從JDK7開始,表達式也可以是String類型,這意味著當前版本的Java可以使用字元串控制switch。通常,控制switch的表達式只是變數,而不是較大的表達式。

case語句中指定的每個值必須是唯一的常量表達式(例如字面值),重複的case值是不允許的。每個值得類型必須與switch表達式的類型兼容。

如果沒有與表達式的值相匹配的case常量,就執行default語句,default語句是可選的,如果沒有該語句,那麼當所有的匹配都不成功時,就不會發生任何動作。當找到一個匹配時,就執行與該匹配相關的語句,直到遇到break為止。對於default或最後一個case,則執行到switch語句的末尾。

例:下面的程式演示了switch語句:

public class SwitchDemo{

public static void main(String[] args){

char score = 'C';

switch (score) {

case 'A':

System.out.println("優秀");

break;

case 'B':

System.out.println("良好");

break;

case 'C':

System.out.println("中等");

break;

case 'D':

System.out.println("及格");

break;

default:

System.out.println("不及格");

}

}

}

編譯並運行這個程式,在控制台將顯示如圖8所示的資訊。

圖8 SwitchDemo運行結果

通過運行結果可以看到,程式在控制台輸出了「中」,這是完全正確的,字元表達式score的值為「C」,對應的結果為「中等」。

在case標籤後的每個程式碼塊後都有一條break語句,這是Java中的關鍵字,break語句有著極其重要的意義,Java的switch語句允許case後程式碼塊中沒有break語句,但是這種做法可能會引入一個陷阱。如果把上面程式中的break語句都注釋掉,將看到以下結果:

public class SwitchDemo{

public static void main(String[] args){

char score = 'C';

switch (score) {

case 'A':

System.out.println("優秀");

case 'B':

System.out.println("良好");

case 'C':

System.out.println("中等");

case 'D':

System.out.println("及格");

default:

System.out.println("不及格");

}

}

}

重新編譯並運行這個程式,控制台向顯示如圖9所示的資訊。

圖9 去掉break後SwitchDemo運行結果

這個運行結果看起來很奇怪,但這正是有switch語句運行流程決定的:switch語句會先求出expression表達式的值,然後拿這個表達式和case標籤後的值進行比較,一旦遇到相等的值,程式就開始執行這個case標籤後的程式碼,不再判斷與後面case、default標籤的條件是否匹配,除非遇到break才會結束。

JDK7增強了switch語句的功能,允許switch語句的控制表達式是java.lang.String類型的變數或表達式,但是只能是java.lang.String類型,不能是StringBuffer或者StringBuilder這兩種字元串類型。