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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xingchen5645 中级黑马   /  2015-12-16 02:02  /  4650 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如题:eg
class Demo2 {
        public static void main(String[] args) {
                int x = 3;
                int y = 4;
                switch (x){
                default :
                        y++;
                case 1:
                        y++;
                case 2:
                        y++;       
                }
                System.out.println(y);
        }
}
由于case 缺少 break, 其相当于进行了循环,且发生了穿透,为何第一次要考虑case 中条件判断情况?穿透后就不需要进行条件判断了?

10 个回复

倒序浏览
switch语句有两种结束方式,遇到break或大括号,没遇到之前都会继续执行的
回复 使用道具 举报
选择结构只会选择一个答案,执行了case后,如果这个case没有对应的break语句,会忽略剩余的case,继续向下执行可执行的语句,直到遇到break或者语句结束为止
回复 使用道具 举报
我顶贴 我快乐~
回复 使用道具 举报
对,穿透后不会再判断条件了
回复 使用道具 举报
都已经穿透了,判断条件已经没用了
回复 使用道具 举报
没有break就按顺序进行穿透
回复 使用道具 举报
遇到break或者到末尾
回复 使用道具 举报
这个运行结果是怎样的
回复 使用道具 举报
雨来 高级黑马 2015-12-16 23:29:28
10#
即便不穿透,因为没有操作表达式 x的值是不会变的 一遍下来 已经把所有case 都匹配不成功,所以如果走结构,也就是Java 中的执行顺序,会按顺序结果从上住下执行,出了switch 语句快这个循环结束了,你也可以想想for 为什么能循环 因为 有循环操作表达式  如果  只写 for(;;)那就成了死循环了;这里没有操作  x 的表达式,而且case穿透 没有匹配成功的,所以出了语句块  打印出 y 的值 因为 3次++ y 的值是  7  出了 main 语句块  main 方法弹栈 垃圾回收机制 在一个不定的时间段启动 程序就彻底的结束了
回复 使用道具 举报
anuo 中级黑马 2015-12-17 23:02:45
11#

switch语句有两种结束方式,遇到break或大括号就会停
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马