java switch穿通,switch表达式、case穿透

记得第一次学switch的时候那是还是学习c语言的时候,整体的写if-else,switch,现在回想起来已经是很多年前的事了,好了今天让我们再来回顾下简单的switch

语法

AAffA0nNPuCLAAAAAElFTkSuQmCCswitch(n)

{case 1:

执行代码块 1  break;case 2:

执行代码块 2  break;default:

n 与 case 1 和 case 2 不同时执行的代码

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

格式解释说明

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案例演示

AAffA0nNPuCLAAAAAElFTkSuQmCCpublic 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-----------");

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCCprivate 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;

}

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

执行结果

AAffA0nNPuCLAAAAAElFTkSuQmCC10

----------case1------------

10

11都不匹配----------case2------------

10

----------case3------------都不匹配9

12

11

----------case4------------都不匹配----------case4_0------------

10

11

----------case4_1------------都不匹配9

-----------case5-----------都不匹配-----------case6-----------

AAffA0nNPuCLAAAAAElFTkSuQmCC

总结:

case穿透和break有关,只有当遇到break时才会终止,不然会继续执行后面case中的代码块

default的位置不会影响执行结果,不管你编写的代码中default放在那里,这里的条件判断都是先按顺序比较其他非default值,当这些条件都不满足的时候,才跳转到default的相应代码处执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值