理解Java中的switch分支語句

安全劍客發表於2019-10-11
在程式中遇到多分支選擇的時候,想必大家都喜歡用if...else if...else...語句,尤其是初學者,因為在瞭解switch語句之前,我也是隻會用if...else語句。那麼現在看完這篇隨筆的介紹後,你們又有了另外一種選擇,使用switch語句可以增強程式碼的可能性,當然switch也不是隨隨便便就能用的,它也有語法規則的約束。
前言:

在程式中遇到多分支選擇的時候,想必大家都喜歡用if...else if...else...語句,尤其是初學者,因為在瞭解switch語句之前,我也是隻會用if...else語句。那麼現在看完這篇隨筆的介紹後,你們又有了另外一種選擇,使用switch語句可以增強程式碼的可能性,當然switch也不是隨隨便便就能用的,它也有語法規則的約束,請看下面的闡述。

一、switch簡介和語法

switch語句用於多分支選擇,由一個控制表示式和多個case標籤組成。switch語句後面的控制表示式的資料型別只能是byte、short、char、int、String和列舉型別,不能是其它型別。

switch語句往往需要在case標籤後緊跟一個程式碼塊,case標籤作為這個程式碼塊的標識。

switch語句的語法如下:

 switch(expr){
 case condition1{
 //程式碼塊...
 break;
 }
 case condition2{
 //程式碼塊...
 break;
 }
 ...
 case conditionN{
 //程式碼塊...
 break;
 }
 dafault:{
 //程式碼塊...
 }
}

這種分支語句的執行是先對expr求值,然後依次匹配每個case標籤後的condition值,遇到匹配的值即執行對應的程式碼塊,如果condition的值沒有與expr表示式的值相等,則執行default標籤後的程式碼塊。

二、switch語句和if語句的區別

switch語句和if語句都可用於分支條件的選擇,但switch後面的控制表示式只能是byte、short、char、int、String和列舉型別,不能是boolean型別,if後面的控制表示式是boolean型別;switch語句中各個case標籤後程式碼塊的開始點和結束點非常清晰,因此完全可以省略case後程式碼塊的花括號。

三、switch的使用及注意事項

為了更清晰的認識switch,下面透過一段程式來示範switch的用法:

 public class TestSwitch {
 public static void main(String[] args) {
 //宣告變數languageType
 String languageType = "Java";
 //執行switch語句
 switch (languageType) {
 case "C":
 System.out.println("C語言");
 break;
 case "Java":
 System.out.println("Java語言");
 break; 
 case "C++":
 System.out.println("C++語言");
 break;
 case "Python":
 System.out.println("Python語言");
 break;
 default:
 System.out.println("語言型別輸入錯誤");
 }
 }
}

執行上面的程式輸出:Java語言。

因為定義的變數(switch後面的控制表示式)"languageType" 與"Java"匹配。

如果把上面程式中的每個case標籤裡的break語句去掉,將會發生什麼樣的結果呢?那麼我先把每個break語句註釋掉,執行結果如下:

Java語言 C++語言 Python語言 語言型別輸入錯誤

輸出結果是不是很奇怪!這正是switch語句的執行流程決定的,只要進入switch語句的入口,程式會一直執行下去,直到遇到break語句,如果省略了break語句,那麼匹配case值後的所有情況(包括default)都會被執行。

所以,使用switch語句時,有兩個值得注意的地方:

1)switch後面的控制表示式只能是byte、short、char、int、String和列舉型別;

2)如果省略了case後的程式碼塊break,將會引入一個陷阱。

原文地址:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2659487/,如需轉載,請註明出處,否則將追究法律責任。

相關文章