天天看點

switch表達式、case穿透

記得第一次學switch的時候那是還是學習c語言的時候,整體的寫if-else,switch,現在回想起來已經是很多年前的事了,好了今天讓我們再來回顧下簡單的switch

文法

switch(n)
{
case 1:
  執行代碼塊 1
  break;
case 2:
  執行代碼塊 2
  break;
default:
  n 與 case 1 和 case 2 不同時執行的代碼
}      

格式解釋說明

switch表達式:可以是byte,short,int,char

JDK5以後可以是枚舉

JDK7以後可以是字元串

case:後面的值就是要和表達式進行比較的值

break:表示程式到這裡中斷,跳出switch語句

default:如果所有的情況都不比對,就執行這裡,相當于if語句中的else

工作原理

A:首先設定表達式 n(通常是一個變量)

B:随後表達式的值會與結構中的每個 case 的值做比較,如果有就執行對應的語句體,看到break就結束。

C:如果沒有比對,就執行default的語句體。

注意事項

A:case後面隻能是常量,不能是變量,而且,多個case後面的值不能出現相同的值

B:default可以省略嗎?

  可以省略,但是不建議,因為它的作用是對不正确的情況給出提示。

C:break可以省略嗎?

  可以省略,但是結果可能不是我們想要的。

  會出現一個現象:case穿透,最終我們建議不要省略

D:default一定要在最後嗎?

  不是,可以在任意位置。但是建議在最後。

E:switch語句的結束條件

  a:遇到break就結束了

  b:執行到末尾就結束了

Case案例示範

public static void main(String[] args)
    {
        case1();

        System.out.println("----------case1------------");

        case2();

        System.out.println("----------case2------------");

        case3();

        System.out.println("----------case3------------");

        case4();

        System.out.println("----------case4------------");

        case4_0();

        System.out.println("----------case4_0------------");

        case4_1();

        System.out.println("----------case4_1------------");

        case5();

        System.out.println("-----------case5-----------");

        case6();

        System.out.println("-----------case6-----------");
    }      
private static void case1()
    {
        switch(NUMBER){
            case 9:
                System.out.println(9);
                break;
            case 10:
                System.out.println(10);
                break;
            case 11:
                System.out.println(11);
                break;
            default:
                System.out.println("都不比對");
        }
    }

    private static void case2()
    {
        switch(NUMBER){
            case 9:
                System.out.println(9);
            case 10:
                System.out.println(10);
            case 11:
                System.out.println(11);
            default:
                System.out.println("都不比對");
        }
    }

    private static void case3()
    {
        switch(NUMBER){
            default:
                System.out.println("都不比對");
                break;  //break有無不影響結果
            case 9:
                System.out.println(9);
                break;
            case 10:
                System.out.println(10);
                break;
            case 11:
                System.out.println(11);
                break;
        }
    }

    private static void case4()
    {
        switch(NUMBER){
            default:
                System.out.println("都不比對");
            case 9:
                System.out.println(9);
            case 12:
                System.out.println(12);
            case 11:
                System.out.println(11);
        }
    }

    private static void case4_0()
    {
        switch(NUMBER){
            default:
                System.out.println("都不比對");
                break; //和case4 比較 是有差別的
            case 9:
                System.out.println(9);
            case 12:
                System.out.println(12);
            case 11:
                System.out.println(11);
        }
    }

    private static void case4_1()
    {
        switch(NUMBER){
            default:
                System.out.println("都不比對");
            case 9:
                System.out.println(9);
            case 10:
                System.out.println(10);
            case 11:
                System.out.println(11);
        }
    }

    private static void case5()
    {
        switch(NUMBER){
            default:
                System.out.println("都不比對");
            case 9:
                System.out.println(9);
                break;
            case 12:
                System.out.println(12);
                break;
            case 11:
                System.out.println(11);
                break;
        }
    }

    private static void case6()
    {
        switch(NUMBER){
            default:
                System.out.println("都不比對");
                break; //case5 比較 是有差別的
            case 9:
                System.out.println(9);
                break;
            case 12:
                System.out.println(12);
                break;
            case 11:
                System.out.println(11);
                break;
        }
    }      

執行結果

10
----------case1------------
10
11
都不比對
----------case2------------
10
----------case3------------
都不比對
9
12
11
----------case4------------
都不比對
----------case4_0------------
10
11
----------case4_1------------
都不比對
9
-----------case5-----------
都不比對
-----------case6-----------      

總結:

case穿透和break有關,隻有當遇到break時才會終止,不然會繼續執行後面case中的代碼塊

default的位置不會影響執行結果,不管你編寫的代碼中default放在那裡,這裡的條件判斷都是先按順序比較其他非default值,當這些條件都不滿足的時候,才跳轉到default的相應代碼處執行。

開開心心編碼,快快樂樂生活。