Java的流程控制结构以及程序跳转关键字详解

2023-10-30

  本文详细介绍了Java中的流程控制结构,以及跳转关键字break、continue、return的使用。

1 流程控制结构分类

  1. 顺序结构:是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
  2. 选择(分支)结构:选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
  3. 循环结构:循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。也称之为迭代。

2 顺序结构

在这里插入图片描述

3 选择结构

3.1 if语句

if 、 if else 、 if else if……else

3.1.1 if

if(关系表达式){
语句体;
}

图解:
在这里插入图片描述

  1. 关系表达式的类型,必须是boolean 类型。
  2. 执行顺序:判断表达式的值:true,执行语句体;false,语句体不执行。
    注意:当if后的语句块中,只有一条语句的时候,{} 可以省略。但建议不省略。

3.1.2 if else

if(关系表达式) {
语句体1;
}else {
语句体2;
}

图解:
在这里插入图片描述

  1. 关系表达式的类型必须是boolean。
  2. 关系表达式的值true,执行语句1;返回的是false,执行语句2;
  3. if语句第二种格式和三元运算符
    三元运算符的操作都可以使用if语句改进,反之不成立。什么时候不成立呢?
    当if语句控制的语句体是一条输出语句的时候,就不成立。因为三元运算符是一个运算符,必须要求有一个结果返回。而输出语句却不能作为一个返回结果。

3.1.3 if … else if … else

if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}
… …
else {
语句体n+1;
}

图解:
在这里插入图片描述

  1. 表达式的类型必须是boolean。
  2. 判断表达式1的值,true,执行语句1;false,继续判断其他的表达式。表达式成立,执行对应的语句体。都不成立,执行else中的语句体n+1。
    注意:使用if语句,先处理包含范围更小的情况,会使代码更加简单。

3.2 switch 语句

switch(表达式){
case 常量标号(值) : 语句;
break;
case 常量标号 : 语句;
break;
case 常量标号 : 语句;
break;
case 常量标号 : 语句;
break;
case 常量标号 : 语句;
break;
case 常量标号 : 语句;
break;
default : 语句;
(break;)
}

图解:
在这里插入图片描述
解释:

  1. 表达式的类型:byte、short、int、char,JDK1.5支持enum枚举,以及他们的包装类,在JDK1.7及以上支持String类型,不能是Long类型、boolean类型、浮点型、StringBuilder和StringBuffer类。
  2. 常量标号(值):类型必须和表达式的类型相同或者是相兼容。只能是常量,不能是变量,而且,多个case后面的值不能出现相同的。
  3. break:用于退出语句,执行完后程序结束,不再向下执行。可省略,但不建议
  4. default:标签可以不作为最后的语句,甚至可以作为第一个语句,但是任然最后匹配。可省略,但不建议,因为它可以作为排除所以正常情况之外的意外情况的解释。

执行顺序:

  1. 若每一层都加入break关键字:
    1. 首先计算表达式的值。
    2. 表达式的值和常量标号匹配,匹配成功,执行相应的语句。
    3. 都匹配不到,执行default。
  2. 若不加break关键字:(case穿透)
    1. 表达式匹配到case相等的标号之后,程序便开始执行该case标签之后的所有代码,并且不再判断与后面的case、default标签是否匹配,除非遇到break或者到结尾才会结束。

注意

  在switch语句中,表达式的值不能是null,否则会在运行时抛出NullPointerException。在case子句中也不能使用null,否则会出现编译错误。
  case字句的值是不能重复的。对于字符串类型的也一样,但是字符串中可以包含Unicode转义字符。重复值的检查是在Java编译器对Java源代码进行相关的词法转换之后才进行的。也就是说,有些case字句的值虽然在源代码中看起来是不同的,但是经词法转换之后是一样的,就会在成编译错误。比如:“男”和“\u7537”就是一个意思。

3.3 If和switch的使用场景

  1. if语句使用场景:
    1. 针对结果是boolean类型的判断
    2. 针对一个范围的判断
    3. 针对几个常量值的判断
  2. switch语句使用场景:
    1. 针对几个常量值的判断

4 循环结构

For 、 while 、 do while循环 、 增强for循环

4.1 循环语句的组成

  1. 初始化语句:一条或者多条语句,这些语句完成一些初始化操作。
  2. 判断条件语句:这是一个boolean 表达式,这个表达式能决定是否执行循环体。
  3. 循环体语句:这个部分是循环体语句,也就是我们要多次做的事情。
  4. 控制条件语句:这个部分在一次循环体结束后,下一次循环判断条件执行前执行。通过用于控制循环条件中的变量,使得循环在合适的时候结束。也称为迭代语句。

4.2 for循环

for(初始化语句;判断条件语句;控制条件语句) {
循环体语句; }

图解:

在这里插入图片描述
执行顺序:

  1. 执行初始化语句
  2. 执行判断条件语句,看其结果是true还是false 如果是false,循环结束。 如果是true,继续执行。
  3. 执行循环体语句
  4. 执行控制条件语句
  5. 回到2继续…………

注意:
  循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略括号。

4.3 while循环

基本格式

while(判断条件语句) {
循环体语句;
}

扩展格式

初始化语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}

图解:
在这里插入图片描述
解释:
  表达式的类型必须是boolean类型。如果表达式的值true,执行循环体。循环体执行完成后,继续判断表达式的值。值还是true,继续执行循环体。当表达式的值false,循环结束。

4.3.1 while的结束条件

  1. 在循环体当中定义使表达式趋于false的式子。
  2. 在while循环体当中可以定义break关键字。结束break关键字所在的循环。
  3. return。但是return表示结束整个方法,return所在的循环和之后的语句都不会执行了,所以慎用。
  4. System.exit(int status)方法,会结束整个线程,慎用。Main方法中return和exit效果是一样的。

4.4 do while

基本格式

do {
循环体语句;
}while((判断条件语句);

扩展格式

初始化语句;
do {
循环体语句;
控制条件语句;
} while((判断条件语句);

图解:
在这里插入图片描述
  判断条件语句:结果是一个boolean类型的值。
  执行顺序:先执行do当中的内容,再去判断表达式的值。为true,继续执行do,为false,结束。
  特点:表达式至少被执行一次。

4.5 while循环和for循环的使用时机

  1. 控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。
  2. 当明确循环次数,有限循环此属使用for循环。
  3. 不明确循环次数的前提下,只能使用while循环。
  4. 如果要使用无限循环,使用while。

4.5.1 三种循环结构的区别及注意事项

  三种循环语句其实都可以完成一样的功能,也就是说可以等价转换,但还是有小区别的:
do…while循环至少会执行一次循环体。for循环和while循环只有在条件成立的时候才会去执行循环体
  注意:无限循环下面不允许再定义代码语句,编译会直接报错。

5 跳转控制关键字

  Java中的goto是保留字,目前不能使用。虽然没有goto语句可以增强程序的安全性,但是也带来很多不便,比如说,我想在某个循环知道到某一步的时候就结束,现在就做不了这件事情。为了弥补这个缺陷,Java就提供了break,continue和return来实现控制语句的跳转和中断。

break 中断
continue 继续
return 返回

5.1 break关键字

应用场景:

  1. 用在switch case条件语句当中,表示switch语句的结束,此时外层如有循环语句,则循环语句不受此break影响。
  2. 用在循环语句当中:
    1. 能够用在循环当中,表示跳出break关键字所在的层的循环。
    2. break标签

语法:

标签名称: for/while(){
break 标签名称;
}

  表示跳出(结束)标签所定义的循环。break在除了上面的场景之外的其他场景中使用无意义。

5.2 continue关键字

  continue:只能用在循环语句当中,其他场景中使用无意义。
使用方式:

  1. 直接使用continue关键字:
    1. 结束本次循环(结束continue语句所在循环下面未完成的部分),继续下次循环。
  2. continue标签;
    1. 语法同break标签,但是意义不同。表示结束continue标签所在的循环的本次循环,继续下次循环。

5.3 return关键字

  return关键字不是为了跳转出循环体,更常用的功能是结束一个方法,也就是退出一个方法。跳转到上层调用的方法。
无返回值的方法当中:
  在方法的末尾,默认存在return关键字(包括构造方法).
  作用:表示方法的结束。
  注意:return表示方法的结束,在return后边不能再有任何的语句,否则编译会报错。
在有返回值的方法当中:
作用一:
  将方法运算后的结果返回。返回结果的类型必须和方法声明处的类型相同或者是兼容。
作用二:
  return表示方法的结束,在return后边不能再有任何的语句。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java的流程控制结构以及程序跳转关键字详解 的相关文章

随机推荐

  • 《Python进阶系列》七:迭代器与生成器

    Python中的迭代器与生成器 quad quad 在Python中存在两种好用的功能 迭代器与生成器 以list容器为例 在使用该容器迭代一组数据时 必须事先将所有数据存储到容器中 才能开始迭代 而生成器却不同 它可以实现在迭代的同时生成
  • pwn 入门基础

    web狗的pwn生之路 系列文章目录 第一章 pwn 入门基础 第二章 pwn 栈题基础 待更新 文章目录 web狗的pwn生之路 系列文章目录 一 汇编基础 重点 笔记 二 Linux 基础 重点 笔记 三 调用约定 重点 笔记 四 EL
  • 移动OneNet——创建和调试

    进入Onenet官网 然后在控制台 创建产品 并在产品下创建设备 一 创建产品 选择多协议接入产品 然后创建一个MQTT协议的产品 创建产品界面参考如下 注意 务必选择MQTT协议 创建完毕后 我们点击查看具体的产品信息 注意 需要记录产品
  • 案例:规则引擎Drools解决汽水问题

    喝汽水问题 1 元钱一瓶汽水 喝完后两个空瓶换一瓶汽水 问 你有50元钱 最多可以喝到几瓶汽水 不能借空瓶 呵呵无商不奸 answer 如果有超过一元钱 则买一瓶汽水喝 此时 钱减少一元 同时拥有的空瓶增加一个 如果拥有至少两个空瓶 则两个
  • 把windows系统的默认编码改成UTF-8

    对于开发人员来说windows的编码的确是神一般的存在 windows老版本语言编码实际上是ascii和gbk编码混用 因此经常乱码 现在UTF 8国际化流行的阶段 windows这么多年 不知道耽误了多少程序员 老朱是linux服务器 数
  • Python数据分析库pandas ------ merge、concatenation 、pd.concat、combine_first、stack、unstack(0)、pivot、drop;合并...

    对于合并操作 熟悉SQL的读者可以将其理解为JOIN操作 它使用一个或多个键把多行数据 结合在一起 事实上 跟关系型数据库打交道的开发人员通常使用SQL的JOIN查询 用几个表共有的引用 值 键 从不同 的表获取数据 以这些键为基础 我们能
  • Java架构直通车——过滤器、拦截器、AOP的区别

    文章目录 过滤器 拦截器 AOP 面向切面 三者使用场景 过滤器 过滤器拦截的是URL Spring中自定义过滤器 Filter 一般只有一个方法 返回值是void 当请求到达web容器时 会探测当前请求地址是否配置有过滤器 有则调用该过滤
  • Vue F11监听切大屏

    用Datav插件做大屏可视化时 有一个全屏需求 我的想法是监听F11键 然后触发浏览器的大屏功能API 百度一下 竟有插件 大喜 插件的好处大家都知道 时间熬出来的 并且BUG极少 代码精简 做了全浏览器兼容 Rec 0001 步骤 1 插
  • 【性能测试】Jenkins+Ant+Jmeter自动化框架的搭建思路

    前言 前面讲了Jmeter在性能测试中的应用及扩展 随着测试的深入 我们发现在性能测试中也会遇到不少的重复工作 比如某新兴业务处于上升阶段 需要在每个版本中 对某些新增接口进行性能测试 有时还需要在一天中的不同时段分别进行性能测试 如果一味
  • idea启动项目很久很慢的一种解决方案

    一 问题描述 IntelliJ idea 在启动项目时 很久很慢 二 解决 在不买个更强更贵的前提下 有以下一种解决方案 1 方案依据 一般地 JVM实例默认最大堆内存是机器的1 64 在启动时会不断地fullGC 不断的申请内存 所以我们
  • FreeBSD SSH配置详解

    ssh config和sshd config都是ssh服务器的配置文件 二者区别在于 前者是针对客户端的配置文件 后者则是针对服务端的配置文件 两个配置文件都允许你通过设置不同的选项来改变客 户端程序的运行方式 下面列出来的是两个配置文件中
  • 【STM32学习】——定时器的编码器接口&正交编码器&编码器接口测速代码实操

    文章目录 前言 一 编码器接口 1 简介 2 正交编码器 二 实操案例 编码器接口测速 总结心得 声明 学习笔记根据b站江科大自化协stm32入门教程编辑 仅供学习交流使用 前言 引入 本实操案例与之前学习外部中断时写的旋转编码器计次的代码
  • 用git bash上传文件到gitee

    本地上传 下载git 官网链接 Git 点击Downloads 选择自己的系统类型 我选的是64 bit Git forWindows Setup 安装git 安装过程中只需额外勾选下图选项即可 这样git bash快捷键将会出现在桌面 会
  • 55. 跳跃游戏 45. 跳跃游戏 II

    55 跳跃游戏 给定一个非负整数数组 nums 你最初位于数组的 第一个下标 数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个下标 示例 1 输入 nums 2 3 1 1 4 输出 true 解释 可以先跳 1
  • 数据挖掘之C4.5决策树算法

    1 决策树算法实现的三个过程 特征选择 选择哪些特征作为分类的标准是决策树算法的关键 因此需要一种衡量标准来进行特征的确定 不同的决策树衡量标准不同 例如C4 5决策树就是以信息增益率来作为衡量标准 决策树的生成 根据所选择的衡量标准不断递
  • Ubuntu 20系统WIFI断连问题

    最近工作需要购置了一台GPU机器 然后搭建了深度学习的运行环境 在工作中将这台机器当做深度学习的服务器来使用 前期已经配置好多用户以及基础环境 但最近通过xshell连接总是不间断的出现断连现象 下面记录下 为此主要进行的操作 1 IP地址
  • Dubbo的几种序列化协议

    dubbo 支持哪些通信协议 支持哪些序列化协议 说一下 Hessian 的数据结构 PB 知道吗 为什么 PB 的效率是最高面试官心理分析 面试官心理分析 上一个问题 说说 dubbo 的基本工作原理 那是你必须知道的 至少要知道 dub
  • 802.11 - 定向多播服务(Directed multicast service)

    定向多播服务 前言 802 11v指定了定向多播服务 directed multicast service DMS 使客户端设备能够请求AP直接向其发送组播和广播帧 提高了网络效率 DMS的传输速率比定期组播每秒快数百Mb 与非DMS基础设
  • Basic Level 1035 插入与归并 (25分)

    题目 根据维基百科的定义 插入排序是迭代算法 逐一获得输入数据 逐步产生有序的输出序列 每步迭代中 算法从输入序列中取出一元素 将之插入有序序列中正确的位置 如此迭代直到全部元素有序 归并排序进行如下迭代操作 首先将原始序列看成 N 个只包
  • Java的流程控制结构以及程序跳转关键字详解

    本文详细介绍了Java中的流程控制结构 以及跳转关键字break continue return的使用 文章目录 1 流程控制结构分类 2 顺序结构 3 选择结构 3 1 if语句 3 1 1 if 3 1 2 if else 3 1 3