网站首页 > java教程 正文
难度
初级
学习时间
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学习小组”。
全栈工程师学习计划
关注我们,加入“全栈工程师学习计划”。
版权声明
原创不易,未经允许不得转载!
猜你喜欢
- 2024-09-25 C语言 switch开关语句(c语言程序switch)
- 2024-09-25 好程序员Java教程分享Java的两种跳转语句
- 2024-09-25 如何更优雅的使用JavaScript中的switch语句
- 2024-09-25 java14引入的“记录类型”和“switch增强”
- 2024-09-25 JAVA笔记(三十四):Javascript流程控制语句
- 2024-09-25 C++——switch 语句(c++里switch语句)
- 2024-09-25 Java 17 更新之:模式匹配要支持 switch了
- 2024-09-25 Java14中switch的Lambda样式语法(java14中switch的lambda样式语法是什么)
- 2024-09-25 Java 17中的Switch表达式:提高代码可读性
- 2024-09-25 Java中的if语句和switch语句#if语句#switch语句
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)