zoukankan      html  css  js  c++  java
  • switch表达式、case穿透

    记得第一次学switch的时候那是还是学习c语言的时候,整体的写if-else,switch,现在回想起来已经是很多年前的事了,好了今天让我们再来回顾下简单的switch

    语法

    switch(n)
    {
    case 1:
      执行代码块 1
      break;
    case 2:
      执行代码块 2
      break;
    default:
      n 与 case 1 和 case 2 不同时执行的代码
    }

    格式解释说明

    switch表达式:可以是byte,short,int,char
    JDK5以后可以是枚举
    JDK7以后可以是字符串
    case:后面的值就是要和表达式进行比较的值
    break:表示程序到这里中断,跳出switch语句
    default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else

    工作原理

    A:首先设置表达式 n(通常是一个变量)
    B:随后表达式的值会与结构中的每个 case 的值做比较,如果有就执行对应的语句体,看到break就结束。
    C:如果没有匹配,就执行default的语句体。

    注意事项

    A:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的值
    B:default可以省略吗?
      可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
    C:break可以省略吗?
      可以省略,但是结果可能不是我们想要的。
      会出现一个现象:case穿透,最终我们建议不要省略
    D:default一定要在最后吗?

      不是,可以在任意位置。但是建议在最后。

    E:switch语句的结束条件

      a:遇到break就结束了
      b:执行到末尾就结束了

    Case案例演示

    public static void main(String[] args)
        {
            case1();
    
            System.out.println("----------case1------------");
    
            case2();
    
            System.out.println("----------case2------------");
    
            case3();
    
            System.out.println("----------case3------------");
    
            case4();
    
            System.out.println("----------case4------------");
    
            case4_0();
    
            System.out.println("----------case4_0------------");
    
            case4_1();
    
            System.out.println("----------case4_1------------");
    
            case5();
    
            System.out.println("-----------case5-----------");
    
            case6();
    
            System.out.println("-----------case6-----------");
        }
    private static void case1()
        {
            switch(NUMBER){
                case 9:
                    System.out.println(9);
                    break;
                case 10:
                    System.out.println(10);
                    break;
                case 11:
                    System.out.println(11);
                    break;
                default:
                    System.out.println("都不匹配");
            }
        }
    
        private static void case2()
        {
            switch(NUMBER){
                case 9:
                    System.out.println(9);
                case 10:
                    System.out.println(10);
                case 11:
                    System.out.println(11);
                default:
                    System.out.println("都不匹配");
            }
        }
    
        private static void case3()
        {
            switch(NUMBER){
                default:
                    System.out.println("都不匹配");
                    break;  //break有无不影响结果
                case 9:
                    System.out.println(9);
                    break;
                case 10:
                    System.out.println(10);
                    break;
                case 11:
                    System.out.println(11);
                    break;
            }
        }
    
        private static void case4()
        {
            switch(NUMBER){
                default:
                    System.out.println("都不匹配");
                case 9:
                    System.out.println(9);
                case 12:
                    System.out.println(12);
                case 11:
                    System.out.println(11);
            }
        }
    
        private static void case4_0()
        {
            switch(NUMBER){
                default:
                    System.out.println("都不匹配");
                    break; //和case4 比较 是有区别的
                case 9:
                    System.out.println(9);
                case 12:
                    System.out.println(12);
                case 11:
                    System.out.println(11);
            }
        }
    
        private static void case4_1()
        {
            switch(NUMBER){
                default:
                    System.out.println("都不匹配");
                case 9:
                    System.out.println(9);
                case 10:
                    System.out.println(10);
                case 11:
                    System.out.println(11);
            }
        }
    
        private static void case5()
        {
            switch(NUMBER){
                default:
                    System.out.println("都不匹配");
                case 9:
                    System.out.println(9);
                    break;
                case 12:
                    System.out.println(12);
                    break;
                case 11:
                    System.out.println(11);
                    break;
            }
        }
    
        private static void case6()
        {
            switch(NUMBER){
                default:
                    System.out.println("都不匹配");
                    break; //case5 比较 是有区别的
                case 9:
                    System.out.println(9);
                    break;
                case 12:
                    System.out.println(12);
                    break;
                case 11:
                    System.out.println(11);
                    break;
            }
        }

    执行结果

    10
    ----------case1------------
    10
    11
    都不匹配
    ----------case2------------
    10
    ----------case3------------
    都不匹配
    9
    12
    11
    ----------case4------------
    都不匹配
    ----------case4_0------------
    10
    11
    ----------case4_1------------
    都不匹配
    9
    -----------case5-----------
    都不匹配
    -----------case6-----------

    总结:

    case穿透和break有关,只有当遇到break时才会终止,不然会继续执行后面case中的代码块

    default的位置不会影响执行结果,不管你编写的代码中default放在那里,这里的条件判断都是先按顺序比较其他非default值,当这些条件都不满足的时候,才跳转到default的相应代码处执行。

  • 相关阅读:
    android pcm
    mongo DB的一般操作
    使用SQL Server 扩展事件来创建死锁的时间跟踪
    sql 日期格式汇总
    简述SQL2008部署多实例集群(学习)
    数据库压缩备份提高备份效率
    SSRS报表连接超时的问题
    classLoader.getResourceAsStream中文乱码
    jQuery与js对象互转
    sqlserver判断字段是否存在更改字段
  • 原文地址:https://www.cnblogs.com/blueskyli/p/9931428.html
Copyright © 2011-2022 走看看