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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马无敌   /  2015-7-11 10:43  /  19988 人查看  /  83 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

不管default放哪都是先执行case的,如果表达式的值与所有case后的常量表达式值均不相同时才执行default后的语句
回复 使用道具 举报
确实不对
应该是这样的:   首先它会检查是否有匹配

1、若是没有匹配到,就从default开始执行直到遇到break或者结束大括号

2、若是匹配到了,则是从匹配到的case哪儿开始往下执行,知道遇到break或者结束大括号
回复 使用道具 举报
给你说的简单点吧:
switch一执行他会去找case ,如果没有找到他会去找default,找到default后他会把default后面的语句依次执行,一直到break停止。
回复 使用道具 举报
本帖最后由 Sky丶 于 2015-7-12 20:28 编辑

你的问题可以看最下面注意事项
switch语句的格式:
        switch(表达式)
        {
                case 值1:
                        语句体1;
                        break;
                case 值2:
                        语句体2;
                        break;
                case 值3:
                        语句体3;
                        break;
                ...
                default:
                        //语句体n;
                        break;        
        }

                A:针对格式的解释
                        switch:表示这里使用的是switch语句,后面跟的是选项。
                                表达式:byte,short,int,char
                                        JDK5以后可以是枚举(以后讲)
                                        JDK7以后可以是字符串(后面讲)
                        case:表示这里就是选项的值,它后面的值将来和表达式的值进行匹配。
                             case后面的值是不能够重复的。
                        break:
                                switch语句执行到这里,就结束了。
                        default:
                                当所有的case和表达式都不匹配的时候,就走default的内容。
                                它相当于if语句的else。一般不建议省略。
                B:执行流程
                        进入switch语句后,就会根据表达式的值去找对应的case值。
                        如果最终没有找到,那么,就执行default的内容。
               
                C:注意事项:
                        a:default整体可以省略吗?
                                可以,但是不建议。
                        b:default的位置可以放到前面吗?
                                可以,但是不建议。
                        c:break可以省略吗?
                                可以,但是不建议。
                                default在最后,break是可以省略的。
                                case后面的break可以省略,但是结果可能有问题。
                        d:switch语句什么时候结束呢?
                                就是遇到break或者执行到程序的末尾。
回复 使用道具 举报
αメ炫 发表于 2015-7-11 18:06
部分对部分不对,为了还原本来的执行顺序,下面代码我都不写break,因为break破坏了正常顺序和正常思维

sw ...

讲的非常仔细 学习了
回复 使用道具 举报
switch语句的执行顺序是先找case,找不到的话,在找default,如果default中没有break,则执行到语句的结尾
回复 使用道具 举报
后面那部分是错的,下面为毕老师课件上的内容。就是说switch放在第一行,也是先执行case,没有匹配的case才执行default
switch语句特点:
  a,switch语句选择的类型只有四种:byte,short,int , char。
  b,case之间与default没有顺序。先执行第一个case,没有匹配的case执行default。
  c,结束switch语句的两种情况:遇到break,执行到switch语句结束。
  d,如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
下面代码为视频中一例子,红色被注释部分就是先default的
class SwitchDemo
{
        public static void main(String[] args)
        {
                int x = 3;
                /*
                switch(x)//byte short int char
                {
                        default:
                                System.out.println("d");
                                //break;
                        case 4:
                                System.out.println("a");
                                //break;
                        case 6:
                                System.out.println("b");
                                break;
                        case 2:
                                System.out.println("c");
                                break;       
                }
                */
                /*
                int a=4,b =2;

                char ch = '+';

                switch(ch)
                {
                        case '-':
                                System.out.println(a-b);
                        break;
                        case '+':
                                System.out.println(a+b);
                        break;
                        case '*':
                                System.out.println(a*b);
                        break;
                        case '/':
                                System.out.println(a/b);
                        break;
                        default:
                                System.out.println("feifa");
                }
                */
                System.out.println("Hello World!");
        }
}

回复 使用道具 举报
孟卫严 发表于 2015-7-11 12:50
首先你是对的!
选择结构switch语句
        switch语句格式:

     学习了
回复 使用道具 举报
先匹配case中的值再执行value值,如果不匹配再从default执行,直到遇到break或者执行完程序结束。
回复 使用道具 举报
懂是懂就是说不出来,还是学习学习
回复 使用道具 举报
先判断 case,都不符合那么执行default,或者case语句中没有break
回复 使用道具 举报
如果有与case匹配的就先从case执行,然后执行那个case中的break结束,如果都没有符合的case,会回到第一行的defaul执行,由于default没有break结束语句,所以下边的case会都执行一遍到结尾结束
回复 使用道具 举报
switch语句执行语句case 和default 是同等级关系 , 并且switch语句结束的两种可能 , 1,break中断,程序结束 ; 2,程序运行至末尾 结束  .
执行过程中 ,  程序会先查看case语句 , 如果case语句没有找到值, 那么就走default.
这其中会涉及到 case穿透 ,  就是如果case语句或者default  没有break中断语句 , 那么就进行case穿透 , 就是程序一直向下执行,一直到程序末尾 , 程序结束.

图片1.jpg (81.28 KB, 下载次数: 136)

switch

switch

图片1.jpg (81.28 KB, 下载次数: 137)

switch

switch
回复 使用道具 举报
编程小黑 来自手机 中级黑马 2015-7-13 00:41:12
34#
已学习,大神啊,这么牛逼
回复 使用道具 举报
我觉得是会先匹配case中的数据,只有匹配不了的时候才会执行default   
回复 使用道具 举报
无论default那个位置
回复 使用道具 举报
你是对的,,先执行case,,没有匹配的,执行default
回复 使用道具 举报
有那么详细的简答,我也过来观摩一下吧
回复 使用道具 举报
不错不错,学习学习
回复 使用道具 举报
在这里借楼上哥们的代码,给你说下,你的问题,希望能有所帮助
首先,这句话是有问题的,在switch语句中,肯定首先执行case语句,然后执行default语句;
情况1:如果case中的value值没有匹配的,那么会在所有的case检查过后,执行defaule语句
情况2:如果default语句中没有break语句,那么在default中的语句执行完后,接下来会顺序执行下面的代码,直到遇到break或者大括号“}”

如下代码,case值不匹配,那么最后会执行default语句,default语句执行完后,顺序执行case3,然后遇到大括号结束整个代码块(ps:能叫代码块不,我也不知道雷。。。)
int a=1;
    switch (a) {
         
         case 2:
            printf("exe case 2\n");
、   
        default:
            printf("exe default\n");
   
        case 3:
            printf("exe case 3\n");
               
    }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马