难度
初级
学习时间
30分钟
适合人群
零基础
开发语言
Java
开发环境
- JDK v11
- IntelliJ IDEA v2018.3
1.什么是流程控制语句?
源文件中的语句通常按照它们出现的顺序从上到下执行。但是,流程控制语句通过使用决策,循环和分支来分解执行流程,使你的程序能够有条件地执行特定的代码块。一共有决策语句(if-then,if-then-else,switch),循环语句(for,while,do-while)和分支语句(break,continue,return)三类。
第一句:
源文件中的语句通常按照它们出现的顺序从上到下执行。
什么是源文件?
在Java中,源文件就是Java类型的文件。
什么是语句?
以分号结尾的就是一条语句。上面有4条语句。
那什么又是“按顺序从上到下执行”?
我们来看一段示例代码:
这个程序输出的结果是:
输出的结果的顺序和它对应的输出语句顺序一致,也是从上到下,依次执行输出。
接着往下看下面一段话:
但是,流程控制语句通过使用决策,循环和分支来分解执行流程,使您的程序能够有条件地执行特定的代码块。
其中,我们的程序执行顺序是可以被控制的,也就是说原来显示输出的是“ABCD”,那么我可以让他只输出“AD”,怎么做到的呢,那就需要和流程控制语句的配合。流程控制语句有三类:
决策语句:if-then,if-then-else,switch
循环语句:for,while,do-while
分支语句:break,continue,return
接下来,本章讲解switch与default。循环语句和分之语句在后续文章讲解。
2.case中的break要在最后
在switch case语句体中,break一定要放置在最后。
我们来看一个正确的例子:
错误的例子:
为什么说它错误,因为break下面的语句永远执行不到,没有任何意义。
3.不加break
我们先来看一个例子:
运行结果:
我们把第一个case里面的break去掉:
运行结果:
大家可以看到,它打印了“1 + 1 = 2”和“1 + 1 = 3”,为什么它没打印“1 + 1 = 4”呢?
我们来看一下程序的执行过程。
第一步,计算出条件表达式的值:
值被计算出来了,值为2,接着开始匹配第一个case:
发现匹配成功,于是就执行case里面的语句,打印“1 + 1 = 2”;打印完了之后,这时switch语句体并没有结束,因为还有case匹配项,而且还没有遇到break结束标记。于是,继续往下执行,因为匹配已经成功,所以再往下执行的时候不需要再进行验证case匹配项,直接执行case语句体:
这个时候就打印了“1 + 1 = 2”和“1 + 1 = 3”,再继续往下执行,碰到break,此时就要结束switch语句体,于是就只打印了“1 + 1 = 2”和“1 + 1 = 3”。
不加break应用场景
举一个例子,一年有四季,1、2、3月对应春天,4、5、6月对应夏天,7、8、9月对应秋天,10、11、12月对应冬天。请问如何用switch语句体现?
按照上图的意思,我们来书写代码:
运行结果:
这代码量也太大了吧,也不直观,重复代码太多。有没有一种简化的办法?像下面这张图一样:
那好,我们就来改造:
运行结果:
可以看到,代码量瞬间减少了,而且阅读性也提高了。充分利用了switch的case匹配成功向下顺延执行的特性,还有简写的特性。
大家,到这里,我们的这段程序已经是非常完美了,但是我想提出一个疑问,如果month=13呢?哪是几月?疑问留在下一节为大家解答。
4.default
上一小节,我们成功完成了月份与季节的小程序,但是最后也留下了一个疑问,那就是month=13,是什么季节?
我们先来回顾上一小节的程序:
然后将month=13:
然后运行结果:
空空如也。如果有一个默认结果就好了,假如用户想查询一个不存在的月份,我就可以显示默认结果给他看,比如“您想查询的月份不合法”。
就这么干,来,改写程序,走起:
运行结果:
很完美。来看看我们是怎么做到的:
这里给大家介绍一个关键字:default。与switch匹配使用时,当没有任何成功匹配项时执行default里面的语句。
5.default简写
default语句的大括号可以省略不写。
将上一小节最后的程序改写:
运行结果:
6.default是最后一个选项
如果我们将default放置switch语句体里面的第一行,运行程序会是怎样?
我们来试试:
运行结果:
出了问题,13月份怎么会还有春天呢?我们需要检查我们的程序,看看哪里出了问题。
首先,我们需要了解default放置在第一行时,是不是第一个运行的?
为了得到这个问题的答案,我们把month改为12,预期结果应该显示冬天:
运行结果:
准确无误,就是冬天。同时也说明了,即使将default语句放置在switch语句体的第一行,那么它也是等待所有case匹配项匹配完毕之后再匹配的。
也就是说,default语句是最后执行的,我来看原程序的这一段代码:
程序显示了“您想查询的月份不合法”和“春天”。程序显示了“春天”之后,就没有继续显示其它内容了,也就是没有继续往下执行了,为什么它没有继续往下执行?因为break,break结束了switch的语句体。
好,为什么显示了“您想查询的月份不合法”之后会继续向下执行并显示“春天”,因为没有结束switch,程序还在继续向下执行,只要给default加一个break即可。
我们来试着给default语句中添加break:
运行结果:
这时,我们再去看结果,发现只有“您想查询的月份不合法”,没有“春天”,也就是说,当程序匹配到default的时候,遇到break语句,直接结束switch,没有继续执行其它case匹配项。
建议:
虽然default语句可以放置在switch语句体中的第一行,但是不推荐放置在第一行。
至此,Java中流程控制语句中决策语句switch相关内容讲解先告一段落,更多内容请持续关注。
附:流程控制语句表
答疑
如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。
上一章
“全栈2019”Java第二十三章:流程控制语句中决策语句switch上篇
下一章
“全栈2019”Java第二十五章:流程控制语句中循环语句while
学习小组
加入同步学习小组,共同交流与进步。
- 方式一:关注头条号gorhaf,私信“Java学习小组”。
- 方式二:关注公众号gorhaf,回复“Java学习小组”。
全栈工程师学习计划
关注我们,加入“全栈工程师学习计划”。
版权声明
原创不易,未经允许不得转载!