switch语句

Java的第二种选择语句是switch语句。switch语句提供了多路分支,因此可以使程序在多个选项中进行选择。尽管一系列嵌套if语句可以执行多路测试,然而多数情况下使用switch则更为高效。其工作方式如下所示:表达式的值与一系列常量进行比较,当找到一个匹配项后,就执行与该匹配项的语句序列。switch语句的基本形式如下所示:
switch(expression)
{
    case constant1:
        statement sequence
        break;
    case constant2:
        statement sequence
        break;
    case constant3:
        statement sequence
        break;
    default:
        statement sequence
}
对于JDK7之前的Java版本,Switch表达式必须是byte、short、int、char类型或枚举。从JDK7开始,表达式也可以是String类型,这意味着现代版本的Java可以使用字符串控制swtich。通常,控制switch的表达式只是变量,而不是较大的表达式。
case语句中指定的每个值必须是唯一的常量表达式。重复的case值是不允许的。每个值的类型必须与switch表达式的类型兼容。
如果没有与表达式的值相匹配的case常量,就执行default语句序列。default语句是可选的。如果没有该语句,那么当所有的匹配都不成功时,就不会发生任何动作。当找到一个匹配时,就执行与该匹配相关的语句,直到遇到break为止;对于一个default或最后一个case,则执行到switch语句的末尾。
    public static void main(String[] args) throws java.io.IOException
    {
        int i;

        for(i=0;i<10;i++)
        {
            switch(i)
            {
                case 0:
                    System.out.println("i is zero");
                    break;
                case 1:
                    System.out.println("i is one");
                    break;
                case 2:
                    System.out.println("i is two");
                    break;
                case 3:
                    System.out.println("i is three");
                    break;
                case 4:
                    System.out.println("i is four");
                    break;
                default:
                    System.out.println("i is five or more");
            }
        }
    }
运行效果:
i is zero
i is one
i is two
i is three
i is four
i is five or more
i is five or more
i is five or more
i is five or more
i is five or more
如你所见,每次循环,执行的都是与i匹配的case常量的相关语句。所有其他语句都会被跳过。当i大于等于5时,就没有与之匹配的case语句了,因此会执行default语句。
从技术上讲,break语句是可选的,但是多数应用程序的switch语句都会使用break语句。当在case语句序列中遇到break语句时,会是程序流程从整个switch语句中退出,从switch以外的下一语句继续执行。然而,如果break语句没有结束与case相关的语句序列,就会执行从匹配case语句开始往后的所有语句,直到又遇到break语句(或抵达switch语句的末尾)为止。
例如,仔细研究下面的程序,在看到输出结果之前,你能想到屏幕上回出现什么吗?
            switch(i)
            {
                case 0:
                    System.out.println("i is zero");
                case 1:
                    System.out.println("i is one");
                case 2:
                    System.out.println("i is two");
                case 3:
                    System.out.println("i is three");
                case 4:
                    System.out.println("i is four");
                default:
                    System.out.println("i is five or more");
            }
运行效果:
i is zero
i is one
i is two
i is three
i is four
i is five or more
i is one
i is two
i is three
i is four
i is five or more
i is two
i is three
i is four
i is five or more
i is three
i is four
i is five or more
i is four
i is five or more
i is five or more
i is five or more
i is five or more
i is five or more
i is five or more
正如该程序所示,如果没有break语句,执行流程就会进入下一case语句。
嵌套的switch语句
一个switch语句可以作为另一个switch语句的内层语句。这样的switch语句就是嵌套switch语句。即使内层switch与外层switch的case常量包含相同的值也不会发生冲突。