Java的switch 语句

switch 语句提供了 if 语句的一个变通形式,可以从多个语句块中选择其中的一个执行。

switch 语句格式

switch 语句是 Java 的多路分支语句。它提供了一种基于一个表达式的值来使程序执行不同部分的简单方法。因此,它提供了一个比一系列 if-else-if 语句更好的选择。

switch 语句的基本语法形式如下所示:

switch(表达式) {

 case 值 1: //这里是冒号:

 语句块 1;

 break;

 case 值 2:

 语句块 2;

 break;

 …

 case 值 n:

 语句块 n;

 break;

 default:

 语句块 n+1;

 break;

}

其中,switch、case、default、break 都是 Java 的关键字。

注意:

    switch:值只能四种类型(byte、short、int、char)

    break:如果没有下边的都读取

    default:可以随便放置,都是最后执行

    switch结束两种方式:执行到break或者switch的}

例子1:switch(int类型)

int a = 2;

switch (a)

{

case 1:

System.out.println("I am the first");

break;// 跳出本循环

case 2:

System.out.println("I am the second");

break;

case 3:

System.out.println("I am the third");

break;

default:// 所有的都不对就读默认的情况

System.out.println("No body");

}

例子2:switch(char类型)

int a=3,b=4;

char ch = '-';

switch (ch)

{

case '+':

{

System.out.println(a+b);

break;// 如果没有break下边的都读取

}

case '-':

{

System.out.println(a-b);

break;

}

case '*':

{

System.out.println(a*b);

break;

}

case '/':

{

System.out.println(a/b);

break;

}

default;//所有的都不对就读默认的情况

{

System.out.println("You are wrong!");

}

}

例子3:当没有break的时候就得考虑default的位置

int a=3,b=4;

char ch = '-';

switch (ch)

{

default;//所有的都不对就读默认的情况

}

{

System.out.println("You are wrong!");

}

case '+':

{

System.out.println(a+b);

}

case '-':

{

System.out.println(a-b);

break;

}

case '*':

{

System.out.println(a*b);

}

case '/':

{

System.out.println(a/b);

}

}

答案:

You are wrong!

7

-1

1)switch

表示“开关”,这个开关就是 switch 关键字后面小括号里的值,小括号里要放一个整型变量或字符型变量。表达式必须为 byte,short,int,char 类型。

Java7 增强了 switch 语句的功能,允许 switch 语句的控制表达式是 java.lang.String 类型的变量或表达式。只能是 java.lang.String 类型,不能是 StringBuffer 或 StringBuilder 这两种字

符串的类型。

1)switch(参数)

case 参数1:

语句

break;

case 参数2:

语句

break;

default:

语句   

2)case

表示“情况,情形”,case 标签可以是:

类型为 char、byte、 short 或 int ,Sting 的常量表达式。

枚举常量。

从 Java SE 7 开始, case 标签还可以是字符串字面量。

注意:重复的 case 值是不允许的。

3)default

表示“默认”,即其他情况都不满足。default 后要紧跟冒号,default 块和 case 块的先后顺序可以变动,不会影响程序执行结果。通常,default 块放在末尾,也可以省略不写。

4)break

表示“停止”,即跳出当前结构。

如果在 case 分支语句的末尾没有 break 语句,有可能触发多个 case 分支。那么就会接着执行下一个 case 分支语句。这种情况相当危险,常常会引发错误

switch 语句的执行过程如下:表达式的值与每个 case 语句中的常量作比较。如果发现了一个与之相匹配的,则执行该 case 语句后的代码。如果没有一个 case 常量与表达式的值相匹配,则执行 default 语句。当然,default 语句是可选的。如果没有相匹配的 case 语句,也没有 default 语句,则什么也不执行。

图 1 switch 语句执行流程图

例 1

int i=3;switch(i){ case 1: System.out.println(1); break; case

2: System.out.println(2); break; case

3: System.out.println(3); break; default: System.out.println("default");

break;}

输出结果:

3

嵌套 switch 语句

可以将一个 switch 语句作为一个外部 switch 语句的语句序列的一部分,这称为嵌套 switch语句。因为一个 switch 语句定义了自己的块,外部 switch 语句和内部 switch 语句的 case常量不会产生冲突。例如,下面的程序段是完全正确的:

public static void main(String[] args) {

 switch (count) {

 case 1:

 switch (target) {

 case 0:

 System.out.println("target is zero");

 break;

 case 1:

 System.out.println("target is one");

 break;

 }

 break;

 case 2: // ...

 }

}

本例中,内部 switch 语句中的 case 1:语句与外部 switch 语句中的 case 1:语句不冲突。变量 count 仅与外层的 case 语句相比较。如果变量 count 为 1,则变量 target 与内层的case 语句相比较。

学到这里我们可以发现以下几点:

switch 语句不同于 if 语句的是 switch 语句仅能测试相等的情况,而 if 语句可计算任何类型的布尔表达式。也就是 switch 语句只能寻找 case 常量间某个值与表达式的值相匹配。

在同一个 switch 语句中没有两个相同的 case 常量。当然,外部 switch 语句中的

case 常量可以和内部 switch 语句中的 case 常量相同。

switch 语句通常比一系列嵌套 if 语句更有效。

if 语句和 switch 语句的区别

if 和 switch 语句都表示条件语句,可以从使用效率和实用性两方面加以区分。

1. 从使用效率上区分

从使用效率上区分,在对同一个变量的不同值作条件判断时,既可以使用 switch 语句,也可以使用 if 语句。使用 switch 语句的效率更高一些,尤其是判断的分支越多,越明显。

2. 从实用性上区分

从语句的实用性角度区分,switch 语句不如 if 条件语句,if 语句是应用最广泛和最实用的语句。

3. 何时使用 if 语句和 switch 语句

在程序开发的过程中,何时使用 if 语句和 switch 语句,需要根据实际情况而定,应尽量做到物尽其用。不能因为 switch 语句的效率高就一直使用,也不能因为 if 语句常用就不用switch 语句。需要根据实际情况,具体问题具体分析,使用最适合的条件语句。

一般情况下,对于判断条件较少的,可以使用 if 条件语句,但是在实现一些多条件的判断 中,最好使用 switch 语句。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值