Java中的switch语句——通过示例学习Java编程(8)
作者: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)的更多相关文章
- Java中的if-else语句——通过示例学习Java编程(7)
作者:CHAITANYA SINGH 来源:https://www.koofun.com/pro/kfpostsdetail?kfpostsid=18 当我们需要根据一个条件执行一组语句时,我们需 ...
- Java中的continue语句——通过示例学习Java编程(12)
作者:CHAITANYA SINGH 来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=23 continue语句主要是用在循环代码块中.当 ...
- Java中的for循环——通过示例学习Java编程(9)
作者:CHAITANYA SINGH 来源:https://www.koofun.com/pro/kfpostsdetail?kfpostsid=21 循环用于反复执行同一组语句,直到满足特定条件 ...
- Java中的do-while循环——通过示例学习Java编程(11)
作者:CHAITANYA SINGH 来源:https://www.koofun.com/pro/kfpostsdetail?kfpostsid=22&cid=0 在上一篇教程中,我们讨论了w ...
- Java中的break循环——通过示例学习Java编程(13)
作者:CHAITANYA SINGH 来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=24 break语句通常用于以下两种情况: (A)使 ...
- Java中的while循环——通过示例学习Java编程(10)
作者:CHAITANYA SINGH 来源:https://www.koofun.com/pro/kfpostsdetail?kfpostsid=20 在上一个教程中,我们讨论了for循环的用法.在本 ...
- Java中的switch语句后面的控制表达式的数据类型
Java中的switch语句后面的控制表达式的数据类型 1.byte 2.char 3.short 4.int 5.枚举类型 6.Java 7允许java.lang.String类型
- 通过字节码分析java中的switch语句
在一次做题中遇到了switch的问题,由于对switch执行顺序的不了解,在这里简单的通过字节码的方式理解一下switch执行顺序(题目如下): public class Ag{ static pub ...
- Java中的switch语句
switch可以替代if..else..,另外据说switch采用二分搜索,效率会更高一点. switch(type) { case 1 : type_name="INCOMING" ...
随机推荐
- nginx开发笔记_ngx_hash源码解析
ngx_hash源码解析 ngx_hash是nginx中的hash表结构,具有以下特点: 静态结构,hash表创建后无法动态添加/删除KV. 采用连续存储方式解决碰撞问题.即出现碰撞的KV存放在连续地 ...
- element el-input 自动获取焦点和IE下光标位置解决方法
在实际开发中我们经常会碰到这样的场景,就是有input的地方都喜欢切换过去input自动获取焦点. 如果这个问题是在input中,很容易就实现了,但是element里面的el-input看源码,其实不 ...
- bzoj 1119 [POI2009] SLO & bzoj 1697 牛排序 —— 置换+贪心
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1119 https://www.lydsy.com/JudgeOnline/problem.p ...
- 更换mysql数据目录后出现 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 的解决办法
服务器上的mysql默认数据目录为/var/lib/mysql/,同时服务器的/空间不是很大,而近期又有大量的日志需要导入进行分析,时常搞得/的空间捉襟见肘,晚上一狠心就想把mysql的数据目录转移到 ...
- 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整
今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...
- linux下如何使用Mysql
项目需要:Linux下链接数据库,并进行相关的查询操作 mySql的一些常用命令 启动:net start mySql; 进入:mysql -u root -p/mysql -h localhost ...
- [poj3071]football概率dp
题意:n支队伍两两进行比赛,求最有可能获得冠军的队伍. 解题关键:概率dp,转移方程:$dp[i][j] + = dp[i][j]*dp[i][k]*p[j][k]$表示第$i$回合$j$获胜的概率 ...
- Http协议-URI和资源
所有东西都有一个标准化的名字,以帮助人们寻找城市中的各种资源.书籍有ISBN号,公交车有线路号,银行账户有账户编码,人有身份证,街道有街道名称.人们告诉图书馆管理员书籍的ISBN号,他即可找出该书籍的 ...
- Zookeeper发布订阅之SpringBoot+Mybatis多数据源
1.前言 数据发布/订阅系统,即所谓的配置中心,顾名思义就是发布者将数据发布到Zookeeper的一个或一系列节点上,供订阅者进行数据订阅,进而达到动态获取数据的目的,实现配置信息的集中管理和数据的动 ...
- 30个Python物联网小实验5:光线感应灯
30个Python物联网小实验5:光线感应灯 光线传感器 光线变化执行函数 光线状态执行函数 30个Python物联网小实验5:光线感应灯 光线传感器 可以检测周围环境的亮度: 方向性较好,感知特定方 ...