专业的JAVA编程教程与资源

网站首页 > java教程 正文

“全栈2019”Java第二十四章:流程控制语句中决策语句switch下篇

temp10 2024-09-25 21:22:56 java教程 8 ℃ 0 评论

难度

初级

学习时间

30分钟

“全栈2019”Java第二十四章:流程控制语句中决策语句switch下篇

适合人群

零基础

开发语言

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学习小组”。

全栈工程师学习计划

关注我们,加入“全栈工程师学习计划”。

版权声明

原创不易,未经允许不得转载!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表