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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李斌 于 2012-5-20 00:20 编辑

以前一直对于Switch语句的执行过程很模糊,今天用代码检测一下了 终于弄得很清楚了,与大家分享一下~
class SwitchTest
{
        public static void main(String[] args)
        {
                int x=2,y=3;
                switch(x)
                {
                        case 5:
                                y++;
                                System.out.println("case 5="+y);
                        default:
                                y++;
                                System.out.println("default="+y);
                                break;
                        //case 2:
                                //y++;
                                //System.out.println("case 2="+y);
                                //break;
                        case 3:
                                y++;
                                System.out.println("case 3="+y);
                                //break;
                        
                        case 4:
                                y++;
                                System.out.println("case 4="+y);
                        
                }
                System.out.println(y);
        }
}
/*
注意:case的执行顺序问题
                        表达式为x=2 case可能值分别为 2、3、4
                        第一步:先找是否有符合表达式x=2的case语句
                                        |——————————有,则执行case2的语句,并且就不执行default语句!
                                第二步:        |--------case2语句中没有break语句,执行完该句就执行其他下一个(注意是下一句,它不往回执行前一case语句)case语句直到break或者}为止。
                                                        |--------case2语句中有break语句,执行完该句就跳出循环。
                                        |———————————没有,则执行default语句
                                                        |--------default语句中没有break语句,则在执行完该句就执行其他下一句(注意是下一句)case语句直到break或者}为止。
                                                        |--------default语句有break语句,则在执行完该句就跳出循环。
*/

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

9 个回复

正序浏览
杨康 发表于 2012-5-20 11:12
不是  我的意思就是 按照你的代码 执行到case2  ,已经满足条件,这时候不再进行下去,直接打印输出case2 ...

我写的代码 可以用来得出那个结论,每个case语句后面都有对应的输出语句 这样就可以知道哪些语句执行了呀
你的问题 我不是很明白
你去敲一下代码检查一下吧
嘿嘿~
回复 使用道具 举报
于陈 中级黑马 2012-5-20 15:23:50
9#

回帖奖励 +1 黑马币

飘过~~ ~~~~~~~~~
回复 使用道具 举报
杨康 中级黑马 2012-5-20 11:12:37
8#
李斌 发表于 2012-5-20 00:59
不对 还要看case2语句有没有break 如果有则跳出循环 没有则执行它后面的case语句 fault语句除外~
我上面的 ...

不是  我的意思就是 按照你的代码 执行到case2  ,已经满足条件,这时候不再进行下去,直接打印输出case2=4
y=4
不对吗?
回复 使用道具 举报
荣天 中级黑马 2012-5-20 08:53:13
7#

回帖奖励 +1 黑马币

默默的 顶一个  
回复 使用道具 举报

回帖奖励 +1 黑马币

switch语句:

通过switch...case...default语句控制程序流程。

根据switch后括号中的值判断运行哪一个case,这个值可以是byte、short、ch;ar、int。

default语句是可选的,如果所有case都不满足,则会执行default。

一旦匹配到一个case,程序就会从这个case向下执行,执行完一个case之后不会跳过其他的case,如需跳过请使用break。


.if和switch的应用:

if:

   1.对具体的值进行判断。

   2.对区间判断。

   3.对运算结果是boolean类型的表达式进行判断。



switch:

   1.对具体的值进行判断。

   2.值的个数通常是固定的。(功能差,书写麻烦)

   对于几个固定的值的判断,建议使用switch语句,因为switch语句会将具体的答案都加载进内存,

   效率相对高点。
回复 使用道具 举报
本帖最后由 李斌 于 2012-5-20 01:01 编辑
杨康 发表于 2012-5-20 00:58
x=2 不是就执行case2那一句就完了吗

不对 还要看case2语句有没有break 如果有则跳出循环 没有则执行它后面的case语句 fault语句除外~
我上面的代码可以把规律总结出来的 哦
不信你敲敲看 嘿嘿~
回复 使用道具 举报

回帖奖励 +1 黑马币

x=2 不是就执行case2那一句就完了吗
回复 使用道具 举报
谢述华 发表于 2012-5-20 00:25
哥们,你总结的挺全的,我也没什么好补充的,同样是熬夜男,必须顶你一下。 ...

嘿嘿 加油~~
回复 使用道具 举报

回帖奖励 +1 黑马币

哥们,你总结的挺全的,我也没什么好补充的,同样是熬夜男,必须顶你一下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马