作者:CHAITANYA SINGH

来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=19

当我们在代码逻辑中有多个选项,而且需要为每个选项执行不同的任务时,我们可以使用switch case语句。

switch case语句的语法看上去如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
switch (变量或整数表达式)
{
     case constant:
     //Java code
     ;
     case constant:
     //Java code
     ;
     default:
     //Java code
     ;
}

注:虽然在switch语句里面的case语句块里面的break语句不是必须要有的,但switch case语句通常还都需要和break语句放在一起使用。我们下面先看一个case语句块里面没有break语句会发生什么的例子,然后我们再进一步讨论如何将switch case和break合在一起使用。

一个简单的switch case实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class SwitchCaseExample1 {
 
   public static void main(String args[]){
     int num=2;
     switch(num+2)
     {
        case 1:
          System.out.println("Case1: Value is: "+num);
        case 2:
          System.out.println("Case2: Value is: "+num);
        case 3:
          System.out.println("Case3: Value is: "+num);
        default:
          System.out.println("Default: Value is: "+num);
      }
   }
}

输出:

1
Default: Value is: 2

以上代码讲解:在switch后面的括号里面我放了一个表达式(num+2),你也可以只放一个变量,如switch(num)。我们看看switch后面的表达式:num+2,其中num值是2,表达式num+2的结果是4。由于在switch语句块里面的case语句里面只有case 1、case 2、case 3,没有case 4,所以程序就跳过了case 1到case 3的语句,直接执行了最下面的default(默认)语句。上面这个例子说明了在switch case语句中含有default语句的重要性,这样可以确保万一所有的case语句没有匹配到合适的,程序永远可以跳转到default(默认)的代码块去执行。

switch case流程图

switch-case语句的流程逻辑是先评估在switch后面的括号里面的表达式,然后根据这个表达式算出的结果,看看下面的case关键字后面的字符串有没有符合表达式的结果,如果有符合的,就跳到那个符合的case语句去执行,如果一个都没有匹配到,就跳到最下面的default语句去执行。

switch-case里面的break语句

虽然在switch case的代码块里面每一个case里面的break语句不是强制要求的,但几乎所有的switch case代码块里面都会有break语句。在我们讨论break语句之前,先看看下面这个不用switch case里面的break语句:

在switch case语句里面的break语句虽然是可选项,但实际上几乎每次在写switch case语句中都会用到它。在我们讨论break语句之前,我们先看一个没有用到break语句的switch case的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class SwitchCaseExample2 {
 
   public static void main(String args[]){
      int i=2;
      switch(i)
      {
         case 1:
           System.out.println("Case1 ");
         case 2:
           System.out.println("Case2 ");
         case 3:
           System.out.println("Case3 ");
         case 4:
           System.out.println("Case4 ");
         default:
           System.out.println("Default ");
      }
   }
}

输出:

1
2
3
4
Case2 
Case3 
Case4 
Default

注意:在上面这个例子里,我们把整数值2赋值给变量i,然后把变量i放到switch后面的括号里面,也就是把整数值2放到switch后面的括号里面,所以当程序执行到语句switch(i)的时候,程序会直接跳到case 2,直接执行case 2下面的语句:System.out.println("Case");,在执行完这个语句后,因为接着的语句中没有break语句,程序继续执行下面的语句,case 3、case 4和default后面的语句,所以在屏幕上会打印出Case2、Case3、Case4和Default四行字,表示这四个语句都执行了。如果我们在执行完case 2后面的语句后,不希望执行case 3和case 4以及default后面的语句,我们可以在这些语句中加上break语句。

当我们希望我们的逻辑流程跳出switch代码块时,就可以用上break语句。每当程序执行到break语句时,都会忽略后面的case语句,直接跳出switch后面的代码块。

我们再看一个例子,这个例子和上面的例子差不多,只是多了break语句。

带break语句的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class SwitchCaseExample2 {
 
   public static void main(String args[]){
      int i=2;
      switch(i)
      {
         case 1:
           System.out.println("Case1 ");
           break;
         case 2:
           System.out.println("Case2 ");
           break;
         case 3:
           System.out.println("Case3 ");
           break;
         case 4:
           System.out.println("Case4 ");
           break;
         default:
           System.out.println("Default ");
      }
   }
}

输出:

1
Case2

从这个输出结果可以看出,程序只运行了case 2后面的代码(打印出文字“Case2”),其余的case 3、case 4和default后面的代码都跳过了,没有执行。

为什么在default语句块里面没有用到break语句?

当程序执行到default语句块后,程序本来就会跳出switch代码块,所以在这里加上break语句完全是画蛇添足,没有必要。

使用switch case语句要注意的几个点:

1)case后面的值不一定要是1、2、3之类的顺序数值。如果case后面的数值是一个整数,那么这个数值可以是任何整数,而且也不一定要按照从小到大的顺序排下来。

2)case后面的值也可以是字符或字符串,具体用法见下面的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class SwitchCaseExample2 {
 
   public static void main(String args[]){
      char ch='b';
      switch(ch)
      {
         case 'd':
           System.out.println("Case1 ");
           break;
         case 'b':
           System.out.println("Case2 ");
           break;
         case 'x':
           System.out.println("Case3 ");
           break;
         case 'y':
           System.out.println("Case4 ");
           break;
         default:
           System.out.println("Default ");
      }
   }
}

3)如果在switch后面的括号里面是一个表达式,那么这个表达式的结果一定要是一个常量,例如:

有效的表达式:

1
2
switch(1+2+23)
switch(1*2+3%4)

无效的表达式:

1
2
switch(ab+cd)
switch(a+b+c)

4)在switch语句里面可以嵌入switch语句,但这种做法要尽量避免,因为这会让程序看上去更复杂,更难读懂。

Java中的switch语句——通过示例学习Java编程(8)的更多相关文章

  1. Java中的if-else语句——通过示例学习Java编程(7)

      作者:CHAITANYA SINGH 来源:https://www.koofun.com/pro/kfpostsdetail?kfpostsid=18 当我们需要根据一个条件执行一组语句时,我们需 ...

  2. Java中的continue语句——通过示例学习Java编程(12)

    作者:CHAITANYA SINGH 来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=23 continue语句主要是用在循环代码块中.当 ...

  3. Java中的for循环——通过示例学习Java编程(9)

      作者:CHAITANYA SINGH 来源:https://www.koofun.com/pro/kfpostsdetail?kfpostsid=21 循环用于反复执行同一组语句,直到满足特定条件 ...

  4. Java中的do-while循环——通过示例学习Java编程(11)

    作者:CHAITANYA SINGH 来源:https://www.koofun.com/pro/kfpostsdetail?kfpostsid=22&cid=0 在上一篇教程中,我们讨论了w ...

  5. Java中的break循环——通过示例学习Java编程(13)

    作者:CHAITANYA SINGH 来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=24 break语句通常用于以下两种情况: (A)使 ...

  6. Java中的while循环——通过示例学习Java编程(10)

    作者:CHAITANYA SINGH 来源:https://www.koofun.com/pro/kfpostsdetail?kfpostsid=20 在上一个教程中,我们讨论了for循环的用法.在本 ...

  7. Java中的switch语句后面的控制表达式的数据类型

    Java中的switch语句后面的控制表达式的数据类型 1.byte 2.char 3.short 4.int 5.枚举类型 6.Java 7允许java.lang.String类型

  8. 通过字节码分析java中的switch语句

    在一次做题中遇到了switch的问题,由于对switch执行顺序的不了解,在这里简单的通过字节码的方式理解一下switch执行顺序(题目如下): public class Ag{ static pub ...

  9. Java中的switch语句

    switch可以替代if..else..,另外据说switch采用二分搜索,效率会更高一点. switch(type) { case 1 : type_name="INCOMING" ...

随机推荐

  1. 数据结构与算法(2)----->字符串

    1. 字符串的一些特点 1.1  广泛性 (1)字符串可以看作是字符类型的数组----->所以可能会涉及排序+查找; (2)很多问题都可以转化为字符串类型的方法去解决; 需要注意的是:用java ...

  2. Nuget:RQCode

    ylbtech-Nuget:QRCode 1.返回顶部 1. https://www.nuget.org/packages?q=qrcode 2. 2.qrcode.js返回顶部 1. https:/ ...

  3. unreal Script(US)一些注意事项

    转自:http://www.cnblogs.com/dongbo/archive/2012/07/10/2585311.html 1.如果计算量很大,考虑使用native Code来完成. 2.如果代 ...

  4. PHP生成唯一的订单号

    记:之前面试的时候被面试官问过简历项目中的订单号我是什么规则生成的,我牛逼吹过头了,乱说了一通,靠!今天在公司的项目中订单号生成,好奇,看了下,就是网上的这种而已. * * uniqid - 官方是这 ...

  5. <正则吃饺子> :关于微信支付的简单总结说明(一)

    关于支付,一直想参与开发,现在根据项目中已有及参见的微信开发文档,将自己对于微信开发的流程进行简单的总结,以备后用和帮助后来者. 一.相关官方文档 微信支付官方文档:https://pay.weixi ...

  6. 《精通Spring4.X企业应用开发实战》读后感第四章(BeanFactory和ApllicationContext)

  7. vb常用命名空间

    摘自:http://www.2cto.com/kf/201211/170837.html 感谢 (一)如下是系统中分离出来Imports MicrosoftImports Microsoft.CSha ...

  8. John 尼姆博弈

    John Little John is playing very funny game with his younger brother. There is one big box filled wi ...

  9. JAVA企业级开发-JavaScript(02)

    一.JavaScript介绍 Javascript语言诞生主要是完成页面的数据验证.因此它运行在客户端,需要运行浏览器来解析执行JavaScript代码. 特点: 交互性(它可以做的就是信息的动态交互 ...

  10. 集成Python Shell

    每次启动shell会话都要导入Python相关对象(数据库实例和模型),这是件十分枯燥的工作.为了避免一直重复导入,我们可以做些配置,让flask-script的shell命令自动导入特定的对象. F ...