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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

hakey 中级黑马 2015-7-15 11:08:44
41#
看完了,相信楼主已经得到了答案,上面的回复说得很清楚了。
回复 使用道具 举报
谢谢大家,我已经明白了
回复 使用道具 举报
default确实可以放在switch的任意位置,如果放在第一行,switch还是会先执行“找case”,也就是执行expression那个部分。如果所有的case中没有满足条件的,然后才开始执行default,然后就是直接执行到break或者执行完了。

也就说,“不管expression与case中的value是否匹配”这段话是错的
回复 使用道具 举报
default是默认的情况,在没有任何匹配的情况下的输出值,如果有匹配的话,就不会执行default语句
回复 使用道具 举报
本帖最后由 nine789 于 2015-7-16 20:38 编辑

这句话是对的,default放在第一行的话,程序还是会从第一个case执行,当所有case都不匹配的时候,default会开始执行,如果default不在最后一行的时候,default会继续往下执行,当执行到第一个break出现的时候 才会跳出,
回复 使用道具 举报
猫咪先生 发表于 2015-7-12 15:51
当default出现在第一行时程序还是会先去从case开始去找匹配对象,当case中没有匹的,则执行default,执行完 ...

这个是对的
回复 使用道具 举报
不对,首先expression与case中的value向比较,如果有匹配的话,就从这个“case”开始执行,并依次往下执行,如果遇到break就提出,如果没有break,依次按顺序执行完所有的语句,自然结束,即使default放在第一行也不会执行。如果所有的value都不匹配就从第一行的default依次往下执行,遇到break退出,没有遇到break一直向下执行,自然结束
回复 使用道具 举报
楼主,你上面说的这些话是错误的。
首先default 默认的意思。
在switch()语句块中,当()中的变量、常量或者表达式的值与switch语句块中任何一个case的值相符,就会执行所符合case语句块中的代码。
如果没有符合的case块,则会执行默认的代码块,也就是default代码块。
如果把default放到switch语句块第一的位置,如果这个代码块中没有break,那么default代码块会像case代码块不加break一样,都具有穿透性(也就是执行完default的代码后,会继续向下执行,直到第一个break出现)。
如果位于switch语句块中第一位置的default代码块中有break,那么它就不具备穿透性,也就不会继续向下执行代码,在执行完default代码块中break之前的代码后,就会跳出switch代码块。
如果把default放到switch语句块最后的位置,无论default代码块中有没有break,都会跳出switch代码块,因为程序代码是从上向下运行。default已经是switch中最后一个代码块,执行完default的代码后,就相当于完成了整个switch代码块的代码,即使没有berak,也不会去执行其他case块的代码。
回复 使用道具 举报
如果找不到break  就会 case穿透。
回复 使用道具 举报
先执行case,再执行default
回复 使用道具 举报
/*
        switch的语句格式:
                switch(表达式)
                {
                        case 取值1:
                                执行语句;
                                break;
                        case 取值2:
                                执行语句;
                                break;
                        ...
                        default:
                                执行语句;
                                break;
                }
/*
        关于default的问题,一下几点需要注意一下:
                一:default可以省略吗?可以。
                  但是,一般不省略,它相当于if的else语句,可以控制所有的非正常情况。
                  假如你非常明确可以省略,那就省略。
                二:break可以省略吗?
                        放在最后面的default的break是可以省略的。
                        放在case语句中的break是可以省略的,但是可能结果有问题。
                        所以,一般不省略。
                三:default可以不放在最后面吗?
                        可以,但是一般都放在最后面。
                四:switch语句什么时候结束吗?
                        遇到break或者执行到switch语句的末尾。

懂了吗?不懂的可以再问~:lol
回复 使用道具 举报
先执行case,找不到匹配的case就去执行default。如果default不是放在末尾,则执行default下面的case,遇到break或者}就退出了。
回复 使用道具 举报
Wqi 高级黑马 2015-7-19 22:59:30
53#
default在第一行,也是先按循序找case执行,case全部不匹配才执行default,然后执行到break退出或者switch结束。
回复 使用道具 举报
我也来学习学习
回复 使用道具 举报
肯定是错的 你在可以试试啊,毕老师的视频也将了,无论default在哪,先匹配case的值,匹配不到在执行Default
回复 使用道具 举报
上面的是错的。首先default可以写在switch结构中的任意位置;如果将default语句放在了第一行,如果case中的value有匹配的,则从这个case开始执行直至遇到break;如果case中没有匹配的,则认为default匹配,就从default开始执行直至遇到break。总结说就是从匹配的分支开始向下执行直至遇到break(其中default也看作和case一样的分支,没有case匹配时default匹配)。所以,如果default和所有的case都不缺少break,default放的位置不影响执行结果。
回复 使用道具 举报
强强_U00ts 发表于 2015-7-11 17:06
恩恩,学习学习,就是先执行case,再执行default,default未必会执行么??

是先执行case,如果没有匹配的case,才会执行default。与default的位置无关
回复 使用道具 举报
哦哦,学习 了
回复 使用道具 举报
学习学习
回复 使用道具 举报
扶摇丶 发表于 2015-7-12 00:14
我们老师曾经举过一个例子,记得不太清了,大概就是:把switch语句看成仓库; break 看成仓库管理员;Case  ...

例子不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马