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

  本文详细介绍了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后边不能再有任何的语句。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值