黑马程序员技术交流社区

标题: switch语句执行顺序研究 [打印本页]

作者: 阿卜    时间: 2016-8-23 22:46
标题: switch语句执行顺序研究
本帖主要研究switch语句的以下几个细节:
1.default语句在什么情况下执行?
2.什么情况下才会去判断case语句?
3.break;的重要性,为什么default最好写在最后?

先上代码:
[Java] 纯文本查看 复制代码
public class SwitchTest1 {
        public static void main(String[] args) {
                String sa = "a";
                String sb = "b";
                String sc = "c";
                //常规用法,输出"a",先判断case "a"为true,执行冒号内的语句,然后遇到break;跳出swicth。
                switch(sa) {
                case "a":
                        System.out.println("a");
                        break;
                case "b":
                        System.out.println("b");
                        break;
                default:
                        System.out.println("default");
                }
               
                System.out.println("---------------");
                //去掉case "a":内的break;输出了"a""b",case "b":并不可能为true,
                //结论:case判断为true任意一次后,忽略之后的所有case判断而直接执行其中的内容
                switch(sa) {
                case "a":
                        System.out.println("a");
                case "b":
                        System.out.println("b");
                        break;
                default:
                        System.out.println("default");
                }
               
                System.out.println("---------------");
                //去掉case "a":和case "b":内的break;输出了"a""b""default",case "b":以及default:并不可能为true,
                //结论:case判断为true任意一次后,忽略之后的所有case判断以及default判断而直接执行其中的内容
                switch(sa) {
                case "a":
                        System.out.println("a");
                case "b":
                        System.out.println("b");
                default:
                        System.out.println("default");
                }
               
                System.out.println("---------------");
                //输出了"a""b"
                //结论:验证之前结论的同时,也证明了case判断成功后,不会去寻找default语句执行。
                switch(sa) {
                default:
                        System.out.println("default");
                case "a":
                        System.out.println("a");
                case "b":
                        System.out.println("b");
                }
               
                System.out.println("---------------");
                //输出了"default""a""b"
                //结论:验证之前结论的同时,也证明了所有的case判断失败后,会去寻找default语句执行。不论default语句在什么位置。
                //**并且结合之前的结论可知,case、default语句任意一次true后,就会跳过switch内之后所有的case和default的判断,执行所有其他语句。
                switch(sc) {
                default:
                        System.out.println("default");
                case "a":
                        System.out.println("a");
                case "b":
                        System.out.println("b");
                }
               
                System.out.println("---------------");
        }
}


由以上的代码我们可以得出几个结论:
1.switch内的所有case判断失败后,才会去寻找default,且不论default写在switch内的哪一行。
2.开始运行switch块时,才会判断case语句,任意一次判断成功后,就会忽略之后所有的case和default。
***或者说,case x:、default:代码的执行通过任何一次冒号后,所有的case和default将失效。
3.因为以上的执行顺序,所以每个case内都需要写break;语句跳出switch块,以免执行到其他条件的语句。
***以及,如果所有case判断失败,去执行default语句时,default内既没有写break;又不是最后的代码,也会导致执行到其他条件的语句,***所以default要放在所有的case之后。
作者: lrwillinggerry    时间: 2016-8-24 17:16
谢谢分享,不错不错
作者: 胡eason    时间: 2016-8-24 21:33
加油!加油!加油!加油!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2