【Java】基础10:流程控制语句
什么叫流程?
我们去找工作,简历被某家公司看到后。先是前台打电话约见面时间,然后去公司,第一轮笔试,若是没通过,直接回家;若是通过了,进入第二轮项目主管面试。若是没通过,直接回家,若是通过了,要么被录取,要么第二轮第三轮面试。
这一段描述下来,找工作面试的过程就是流程。公司对面试人员的安排就叫做流程的控制。
在程序中也是一样的道理。
一、顺序结构
打电话、笔试、一面、二面、录取这就是顺序结构。
在程序中,其执行的顺序由代码编写的顺序控制,从上到下执行。
这也是最简单最基础的一种结构。
二、选择结构
还是以面试为例子,面试官会根据面试者的笔试成绩选择是否将他留下,这就涉及到选择结构了。
在Java代码中存在一种特殊的语句,叫做选择语句,对一些条件做出判断,从而选择对应的代码执行。这种由选择语句组成的代码结构就是选择结构。
选择语句有:if条件语句和switch条件语句。
1.if语句
if即如果的意思,如果笔试成绩达到80分,就进入面试,要用代码实现如下:
执行流程:
- 首先判断
布尔表达式
看其结果是true还是false - 如果是true就执行语句体
- 如果是false就不执行语句体
2.if…else语句
if ...else 语句是指如果满足某种条件就进行某种处理,否则就进行另外一种处理。
执行流程
- 首先判断布尔表达式看其结果是true还是false
- 如果是true就执行语句体1
- 如果是false就执行语句体2
3.与三元运算符的互换
if…else语句和昨天学习的三元运算符效果是一样的
4.if…else if…else if…else语句
if…else if…else if…else可以对多个条件进行判断,进行多种不同的处理。
执行流程
- 首先判断布尔表达式1看其结果是true还是false
- 如果是true就执行语句体1
- 如果是false就继续判断布尔表达式2看其结果是true还是false
- 如果是true就执行语句体2
- 如果是false就继续判断布尔表达式…看其结果是true还是false
- …
- 如果没有任何布尔表达式为true,就执行后面的与语句体。
5.switch语句
switch也是一种选择语句,和if不同的是,switch只能判断某个表达式的值,从决定执行那段代码。
下面就用一个判断星期几的例子介绍下switch语句。
注意事项
- 表达式中的值要与case中的值数据类型一致。
- 在switch中的表达式只能是byte、short、int、char、Enum(枚举值)、String(字符串)。用其它的类型值编译会报错。
- break不能漏写,否则会出现case的穿透,改变逻辑。
执行流程
- 首先计算出表达式的值
- 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
- 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
6.case的穿透性
在switch语句中,若是case后面没有写break,将会出现穿透现象,不在判断下面的值,而是直接往下运行,直到遇到break为止,或者整体switch结束,这就是case的穿透性。
这不是bug,能够用来解决某些需求。
例如,周一到周五是工作日,周六周日是双休日。
三、循环结构
什么叫循环结构呢?
最常见的例子就是钟表了,每天从0点到24点不停地循环。
在Java语言中,有一种特殊的语句叫做循环语句,可以实现代码的重复执行,这种由循环语句形成的结构就是循环结构。
1.for循环
例子:循环打印10遍“HelloWorld”
执行流程:
- 执行顺序:①②③④>②③④>②③④…②不满足为止。
- ①为初始化语句(int i=0)
- ②为判断语句(i<10?),不满足则跳出循环
- ③为循环体,满足判断条件就执行
- ④为控制条件语句,循环后变量会变化
格式:
格式是灵活变通的,三种格式都可以使用
2.while循环
和for循环是一样的,只不过关键字不一样
执行流程:
- 执行顺序:①②③④>②③④>②③④…②不满足为止。
- ①为初始化语句(int i=0)
- ②为判断语句,不满足直接跳出循环
- ③为循环体,满足判断条件就执行
- ④为控制条件语句,循环后变量会变化
3.do…while循环语句
do…while语句特点:
- while后面有分号结束(切记)
- 无论如何,循环体语句都会先执行一次,再去判断条件满不满足
执行流程:
- 执行顺序:①②③>④②③>④②③…④不满足为止。
- ①是初始化语句(int i=0)
- ②是循环体语句(先执行一次,后面判断条件满足再执行)
- ③是控制条件语句,循环后变量会变化
- ④是判断语句,不满足条件循环就会跳出
4.循环语句的区别
由上可以看出:
- 变量i在for循环外就不能访问了(for循环的常规格式不能访问,for循环的其他两种格式也能访问)
- 变量i在while循环外也能被访问
由此可以引申一个概念:变量作用域
也就是说一个变量在某个范围内才有效,超出这个范围就不能访问了,这个范围就是该变量的作用域。
一般变量的作用域就是和它最近的一个大括号内。
也有特例就是上面说的for循环,只在循环内有效。
5.死循环
什么叫死循环?
就是判断语句永远为true,死循环不会结束循环,会一直循环下去
DOS系统中,若是出现死循环,可以按Ctrl+C结束死循环。
6.嵌套循环
顾名思义,在一个循环语句里面再定义一个循环语句,就是嵌套循环。
for,while,do…while都可以进行嵌套循环,它们之间也可以相互嵌套,最常见的就是在for循环中嵌套for循环。
比如说每天时间的变化就使用到了嵌套循环:
7.break
在switch语句中:
作用是终止某个case并跳出,没有break,会出现case穿透。
在循环语句中:
作用是跳出循环语句,并继续执行循环结构后面的代码。
在嵌套循环中:
作用是只能跳出当前的循环语句,不能跳出外层循环语句。
如果想跳出外层循环,可以在外层循环的关键字前加上标记。
在闹钟定时,就可以使用到这个:
8.continue(继续)
continue的作用是指:结束本次循环,继续下一次循环。
比如:对[1,100]区间内的奇数求和,并打印出来
总结
- .NET的资源并不限于.resx文件,你可以采用任意存储形式[上篇]
- RabbitMQ入门-消息订阅模式
- 年终盘点:2018最值得学习的几种热门编程语言
- 如何编写没有Try/Catch的程序
- RabbitMQ入门-消息派发那些事儿
- RabbitMQ入门-高效的Work模式
- 谈谈分布式事务之四: 两种事务处理协议OleTx与WS-AT
- RabbitMQ入门-从HelloWorld开始
- RabbitMQ入门-从HelloWorld开始
- RabbitMQ入门-初识RabbitMQ
- 谈谈分布式事务之三: System.Transactions事务详解[下篇]
- 当InternalsVisibleToAttribute特性遭遇"强签名"
- MyBatis-从查询昨天的数据说起
- WCF并发(Concurrency)的本质:同一个服务实例上下文(InstanceContext)同时处理多个服务调用请求
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 「干货」基本数据类型和引用数据类型的区别
- int 和 integer :装箱和拆箱的过程,会用到什么方法,你觉得这个会对性能有影响吗,原因是什么(百度一面)
- 数组:这个循环可以转懵很多人!
- 企业远程办公视频会议系统EasyRTC-SFU下侧边栏边框超限问题如何解决?
- 编写高质量可维护的代码:数据建模
- 新版企业远程办公视频通话系统EasyRTC-SFU,如何解决用户登录信息更新不及时的问题?
- 服务应用突然宕机了?别怕,Dubbo 帮你自动搞定服务隔离!
- 33.Python字符串方法find以及与序列解包的技巧结合
- 代码审计从0到1 —— Centreon One-click To RCE
- 一文带你深扒ClassLoader内核,揭开它的神秘面纱!
- 小知识:OGG的TRANLOGOPTIONS MINEFROMACTIVEDG参数
- oracle转postgreSQL修改点
- 重学数据结构(三、队列)
- Jmeter系列(68)- BeanShell 内置变量 prev
- 聊聊java中的哪些Map:(六)ConcurrentHashMap源码分析