A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 18343105017 中级黑马   /  2016-6-21 23:17  /  960 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 18343105017 于 2016-6-23 22:06 编辑

细节:1):break是可以省略的,如果省略了就一直执行到遇到break为止;
           2):switch 后面的小括号中的变量应该是byte,char,short,int四种类型中的一种;
           3):default可以写在switch结构中的任意位置;
1.case default的匹配工作只做一次 2.一旦进入代码区,就是从头执行到尾直到遇到break

例1:
int a=1;
switch (a) {

        default:
            printf("exe default\n");
            
        case 1:
            printf("exe case 1\n");
   
        case 2:
            printf("exe case 2\n");
            
    }
结果:
exe case 1
exe case 2

如果匹配不到case 就走default进入代码区,代码区是啥?就是除了前面case default剩下的部分

int a=1;
    switch (a) {
            
        default:
            printf("exe default\n");
            
        case 2:
            printf("exe case 2\n");
   
        case 3:
            printf("exe case 3\n");
               
    }

这里没有匹配到case就从default进入代码区,代码区就是

            printf("exe default\n");
            
            printf("exe case 2\n");
   
            printf("exe case 3\n");

所以结果就是
exe default
exe case 2
exe case 3

你这样放

        case 2:
            printf("exe case 2\n");
   
        default:
            printf("exe default\n");

        case 3:
            printf("exe case 3\n");

没有匹配到case从default进入代码区
结果就是
exe default
exe case 3

这就是switch本来应该执行的顺序,每个case后面的代码本来都是连在一起的,代码部分就是一个整体,从头执行到尾

可是代码区里面插入了break,打破规则,让每个case独立感觉像是一个分支,执行完就结束

printf("exe case 2\n");
break;
printf("exe default\n");
break;
printf("exe case 3\n");
break;

有了break的代码区变成了一段一段的,从而产生错觉,感觉像是分支,还纠结究竟执行哪个,其实没有break捣蛋,只要进入代码区,管它啥从头执行到尾


11 个回复

倒序浏览
很好!温故知新!
回复 使用道具 举报
这都是从复习笔记中摘过来的
回复 使用道具 举报
顶一个!
回复 使用道具 举报

感谢,感谢
回复 使用道具 举报
楼主第二句话有点问题 switch 后面的小括号中的变量类型,除了byte,char,short,int四种类型外,String  和枚举类型也都可以的
回复 使用道具 举报
好像是先匹配case后面的值,如果没有你相同的就执行default,如果把default放前面不一定先执行default
比如这个例子int x=2,y=3;
switch(x)
{
        default:
                y++;
        case 3:
                y++;
        case 4:
                y++;
}
System.out.println("y="+y);
回复 使用道具 举报 1 0
天之骄子no1 发表于 2016-6-23 20:09
楼主第二句话有点问题 switch 后面的小括号中的变量类型,除了byte,char,short,int四种类型外,String  和 ...

恩 1.5版本后枚举可以  1.7版本后String可以
回复 使用道具 举报
940752944 发表于 2016-6-23 20:51
好像是先匹配case后面的值,如果没有你相同的就执行default,如果把default放前面不一定先执行default
比如 ...

恩 我复制粘贴的时候还真没注意到   谢谢指出
回复 使用道具 举报
不错!温故知新。
回复 使用道具 举报
很不错,温故知新,赞一个
回复 使用道具 举报
有点问题
细节:1):break是可以省略的,如果省略了就一直执行到程序末尾结束,如果省略掉break会有出现case穿透现象,有时候写程序会用到case穿透

           2):switch 后面的小括号中的变量应该是byte,char,short,int四种类型中的一种;jdk1.5以后可以是枚举,jdk1.7以后可以是字符串(String)

           3):default可以写在switch结构中的任意位置;不管default在什么位置,都是先匹配case的值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马