亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

switch表達式、case穿透

標簽:
Java

记得第一次学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的相应代码处执行。

原文出处:https://www.cnblogs.com/blueskyli/p/9931428.html  


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 1
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消