Java入門第7節——switch選擇結構

系列連載文章,大家可以從我的專欄學習Java入門基礎知識,後續也會有更高級的Java特性、企業級開發框架,也有平常工作中的技術總結和分享,歡迎關注我的CDSN博客。同時可關注微信公衆號“Java開發之旅”,獲得更多技術資料! 

目錄

閒言碎語

switch結構的簡介及語法

switch結構中的break

switch所支持的數據類型

小結


閒言碎語

上一節我們學習了Java中的if選擇結構,讓我們實現了程序中的邏輯控制。Java當中還有一種選擇結構叫做switch,下面我們就學習這個結構,大家注意總結和對比它和if之間的區別。

 

switch結構的簡介及語法

先上語法:

switch (變量或字面值) {
    case 字面值1 :
        //要執行的語句
        break;  //跳出標識,可選
    case 字面值2 :
        break;
    //……
    //任意個case分支
    //……
    default :
        //要執行的語句
        break;
}

以上語法中,每一個case表示一個分支,switch結構就是判斷變量的值是否和某個分支的值相等,如果相等,那就執行這個分支裏的代碼;如果不相等,就繼續往下判斷其他的分支;如果所有分支都不相等,就執行default分支裏的代碼,即默認要執行的代碼。當然,這裏的default分支是可選的,如果所有case分支都不滿足又沒有default,那就什麼都不執行。

看一個例子:

int num = 3;
switch (num) {
    case 1:
        System.out.println("num等於1,進入了第一個case分支");
        break;
    case 2:
        System.out.println("num等於2,進入了第二個case分支");
        break;
    case 3:
        System.out.println("num等於3,進入了第三個case分支");
        break;
    default:
        System.out.println("沒有滿足條件的case分支,執行默認的default分支");
        break;
}

以上代碼,因爲num的變量值是3,所以前兩個case分支都不滿足條件,所以執行了第三個case分支:

 

 

如果將num的值改爲4,那麼所有的case分支都不滿足,就會執行default分支:

 

 

另外,switch結構的case分支只能給定字面值,即寫死的值,不可以是變量,以下代碼錯誤:

 

 

正是由於這個原因,switch只可以做等值判斷,不可以做更靈活的區間判斷,所以下面的代碼也是錯誤的:

 

 

細心的同學可以發現,我們上面寫的代碼,其實等同於以下代碼(前提是所有case分支都加了break):

int num = 3;
if (num == 1) {
    System.out.println("num等於1,進入了第一個case分支");
}else if (num == 2) {
    System.out.println("num等於2,進入了第二個case分支");
}else if (num == 3) {
    System.out.println("num等於3,進入了第三個case分支");
}else {
    System.out.println("沒有滿足條件的case分支,執行默認的default分支");
}

所以說,在等值判斷的情況下,switch結構和if結構都可以實現,一般情況下爲了簡潔我們會選擇switch結構。但有時候不得不使用if結構,比如區間判斷或者更復雜的邏輯判斷。

上面我提到break語句是可選的,而且我在轉換爲上面的if-else結構時,特意說明“前提是所有case分支都加了break”,爲什麼呢?

接下來就讓我們一探break語句的究竟!

 

switch結構中的break

在switch語句中,break是可選的。當某一個case分支被執行完畢,如果此分支沒有break,將繼續執行後面的所有case分支,直到遇見break爲止。如果後面的所有分支都沒有break,那麼將一直執行到default分支纔會跳出整個switch結構。

int num = 1;
switch (num) {
    case 1:
        System.out.println("num等於1,進入了第一個case分支");
    case 2:
        System.out.println("num等於2,進入了第二個case分支");
    case 3:
        System.out.println("num等於3,進入了第三個case分支");
    default:
        System.out.println("沒有滿足條件的case分支,執行默認的default分支");
        break;
}

以上代碼,第一個case分支就被匹配上了,所以會輸出“num等於1,進入了第一個case分支”。但是我們沒有在這個分支加break,所以會繼續往下執行其他的case分支(哪怕這些case分支的值並不是1),又因爲後續所有的case分支都沒有break,所以會一直執行到default分支,結束

 

 

這裏需要注意兩點。第一:如果某個case分支被執行,但是卻沒有break,那麼後續的所有case分支不管是否滿足條件,都會被執行;第二,執行完default分支後結束了整個switch結構,但並不是因爲default分支有break,而是因爲default分支就是處於結構的最後,沒有代碼可執行了,所以一般情況下default分支也不用加break,這裏只是讓大家知道它可以加,但是沒必要加。

如果我在case 2分支中加上break,那麼就不會繼續執行後續的case和default:

int num = 1;
switch (num) {
    case 1:
        System.out.println("num等於1,進入了第一個case分支");
    case 2:
        System.out.println("num等於2,進入了第二個case分支");
        break;
    case 3:
        System.out.println("num等於3,進入了第三個case分支");
    default:
        System.out.println("沒有滿足條件的case分支,執行默認的default分支");
        break;
}

switch所支持的數據類型

switch結構支持以下6種數據類型:byte、short、int、char、String、枚舉。

枚舉類型會在後面的章節中引入,現在還太早。所以以下代碼都是合法的:

char c = 'A';
switch (c) {
    case 'A':
        System.out.println("優秀");
        break;
    case 'B':
        System.out.println("良好");
        break;
    case 'C':
        System.out.println("差");
        break;
    default:
        System.out.println("優秀");
}
String s = "A";
switch (s) {
    case "A":
        System.out.println("優秀");
        break;
    case "B":
        System.out.println("良好");
        break;
    case "C":
        System.out.println("差");
        break;
    default:
        System.out.println("優秀");
}

另外,case分支的值必須和switch括號裏的變量值是同一數據類型,你不能switch裏給的是字符串類型,case分支的字面值卻是數字類型:

 

 

小結

switch結構的執行流程:

1、由上往下,依次判斷每個case分支的字面值是否等於變量的值

2、如果相等則執行此分支中的代碼,執行完畢後再看此分支是否有break語句,有的話直接跳出整個switch結構,沒有的話就執行此分支後面的所有分支,直到遇見break語句跳出

3、如果不相等,則繼續往下判斷其他的分支,重複以上兩個步驟

4、所有的case分支都不滿足,此時如果有default分支則執行default,執行完default就跳出了switch結構,沒有default就直接跳出switch結構,什麼都不執行

 

switch結構和if結構的區別和聯繫:

1、switch結構只能進行等值判斷,而if結構可以進行區間判斷、負責邏輯的判斷

2、等值判斷下,switch結構要更簡潔

3、所有的switch結構都可以轉換爲if-else結構,但if-else結構不一定可以轉換爲switch結構

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章