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的相應代碼處執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM