📜  Java中的switch语句

📅  最后修改于: 2020-02-12 15:29:50             🧑  作者: Mango

switch语句是多向分支语句。它提供了一种简单的方法,可以根据表达式的值将执行分派到代码的不同部分。基本上,表达式可以是byte,short,char和int基本数据类型。从JDK7开始,它还适用于枚举类型(Java中的Enums),String类和Wrapper类。
switch-case的语法: 

// switch语句
switch(expression)
{
   // case 语句,值一定要和之前的一致
   case value1 :
      // 语句1
      break; // break可选
   case value2 :
      // 语句2
      break; // break可选
   // 我们设定无数条case,如下是默认情况,即没有匹配到的case将执行的部分
   default :
      // Statements
}

switch流程图:


switch语句的一些重要规则:

  • 不允许重复的大小写值。
  • case的值必须与switch中的变量具有相同的数据类型。
  • case的值必须是常量,不允许使用变量。
  • break语句在switch内部用于终止语句序列。
  • break语句是可选的。如果省略,将继续执行下一种情况。
  • 默认语句是可选的,可以出现在switch块内的任何位置。如果不是末尾,则必须在默认语句之后保留一个break语句,以省略下一个case语句的执行。

例子:
考虑下面的Java程序,它声明一个名为day的int,其值表示day(1-7)。该代码使用switch语句基于日期的值显示日期的名称。

// Java展示switch语句
public class Test {
    public static void main(String[] args)
    {
        int day = 5;
        String dayString;
        // switch语句使用int数据类型
        switch (day) {
        case 1:
            dayString = "周一";
            break;
        case 2:
            dayString = "周二";
            break;
        case 3:
            dayString = "周三";
            break;
        case 4:
            dayString = "周四";
            break;
        case 5:
            dayString = "周五";
            break;
        case 6:
            dayString = "周日";
            break;
        case 7:
            dayString = "周日";
            break;
        default:
            dayString = "不可用的日";
            break;
        }
        System.out.println(dayString);
    }
}

输出:

周五

省略break语句

由于break语句是可选的。如果我们省略中断,则执行将继续到下一种情况。有时希望有多个案例之间没有break语句。例如,考虑上述程序的更新版本,它还会显示一天是工作日还是周末。

// Java展示switch不使用break的情况下回执行多种情况
public class Test {
    public static void main(String[] args)
    {
        int day = 2;
        String dayType;
        String dayString;
        switch (day) {
        case 1:
            dayString = "周一";
            break;
        case 2:
            dayString = "周二";
            break;
        case 3:
            dayString = "周三";
            break;
        case 4:
            dayString = "周四";
            break;
        case 5:
            dayString = "周五";
            break;
        case 6:
            dayString = "周六";
            break;
        case 7:
            dayString = "周日";
            break;
        default:
            dayString = "不可用的日";
        }
        switch (day) {
        // 没有使用break的多条case
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            dayType = "工作日";
            break;
        case 6:
        case 7:
            dayType = "周末";
            break;
        default:
            dayType = "不可用";
        }
        System.out.println(dayString + " 是 " + dayType);
    }
}

输出:

周二 是 工作日

嵌套switch case语句

我们可以将一个switch用作外部开关的语句序列的一部分。这称为嵌套开关。由于switch语句定义了自己的块,因此内部开关中的大小写常量与外部开关中的大小写常量之间不会发生冲突。例如:

// Java程序,使用嵌套switch
public class Test {
    public static void main(String[] args)
    {
        String Branch = "CSE";
        int year = 2;
        switch (year) {
        case 1:
            System.out.println("选课 : 英语, 微积分");
            break;
        case 2:
            switch (Branch) // 嵌套switch
            {
            case "CSE":
            case "CCE":
                System.out.println("选课 : 机器学习, 大数据");
                break;
            case "ECE":
                System.out.println("选课 : 电路结构");
                break;
            default:
                System.out.println("选课 : 优化方法");
            }
        }
    }
}

输出:

选课 : 机器学习, 大数据