java 循环控制结构break continue return
前言
Java语言没有提供goto语句来控制程序的跳转,这种做法提高了程序流程控制的可读性,但降低了程序流程控制的灵活性。为了弥补这种不足,Java提供了break和 continue来控制循环结构。除此之外, return可以结束整个方法,当然也就结束了一次循环
使用 break结束循环
结束本层循环
某些时候需要在某种条件出现时强行终止循环,而不是等到循环条件为 false时才退出循环。此时,可以使用 break来完成这个功能。 break用于完全结束一个循环,跳出循环体。不管是哪种循环,一旦在循环体中遇到 break,系统将完全结東该循环,开始执行循环之后的代码。例如如下程序。
1 | // 一个简单的for循环 |
运行结果:
1 | i的值是0 |
运行上面程序,将看到i循环到2时即结束,当i等于2时,循环体内遇到 break语句,程序跳出该循环。
break 标签 结束标签指定的外层循环
break语句不仅可以结束其所在的循环,还可以直接结束其外层循环。此时需要在 break后紧跟一个标签,这个标签用于标识一个外层循环,Java中的标签就是一个紧跟着英文冒号(:)的标识符。与其他语言不同的是,Java中的标签只有放在循环语句之前才有作用。例如下面代码。
1 | // 外层循环,outer作为标识符 |
运行结果:
1 | i的值为:0 j的值为:0 |
程序从外层循环进入内层循环后,当j等于1时,程序遇到一个 break outer;
语句,这行代码将会结束 outer标签指定的外层循环,而不是结束 break所在的循环。所以看到上面的运行结果。
值得指出的是, break后的标签必须是一个**有效的标签
,即这个标签必须在 break语句所在的循环之前定义
,或者在其所在循环的外层循环之前定义
**。当然,如果把这个标签放在 break语句所在的循环之前,虽然在语法上是没有错的,但是break默认就是结束其所在的循环,多加一个标签来结束本层循环显然画蛇添足。
使用 continue忽略本次循环剩下语句
continue的功能和 break有点类似,区别是 continue只是忽略本次循环剩下语句,接着开始下一次循环,并不会终止循环;而 break则是完全终止循环本身。如下程序示范了 continue的用法。
1 | // 一个简单的for循环 |
运行结果:
1 | i的值是0 |
从上面运行结果来看,当i等于1时,程序没有输出“ continue后的输出语句”字符串,因为程序执行到 continue时,忽略了当次循环中 continue语句后的代码。
continue不要放在循环体最后面
从这个意义上来看,如果把一个 continue语句放在单次循环的最后一行,这个 continue语句是没有任何意义的—因为它仅仅忽略了一片空白,没有忽略任何程序语句。
continue标签 结束本次外层循环
与 break类似的是, continue后也可以紧跟一个标签,用于直接跳过标签所标识循环的当次循环的剩下语句,重新开始下一次循环。例如下面代码。
1 | // 外层循环 |
运行结果:
1 | i的值为:0 j的值为:0 |
可以看到,循环变量j的值将无法超过1,因为每当j等于1时, continue outer;
语句就结束了本次外层循环,内层循环没有机会执行完成,直接开始下一次外层循环。与 break类似的是, continue后的标签也必须是一个有效标签,即这个标签通常应该定义在 continue所在循环的外层循环之前
。
使用 return结束方法
return关键字并不是专门用于结束循环的, return的功能是结束一个方法。当一个方法执行到一个return语句时( return关键字后还可以跟变量、常量和表达式,这将在方法介绍中有更详细的解释),这个方法将被结束。
Java程序中大部分循环都被放在方法中执行,例如前面介绍的所有循环示范程序。一旦在循环体内执行到一个 return语句, return语句就会结束该方法,循环自然也随之结束。例如下面程序
1 | // 一个简单的for循环 |
运行结果:
1 | i的值是0 |
运行上面程序,循环只能执行到i等于1时,当i等于1时程序将完全结束(当main方法结束时,也就是Java程序结束时)。从这个运行结果来看,虽然 return并不是专门用于循环结构控制的关键字,但通过 return语句确实可以结束一个循环。与 continue和 break不同的是, return直接结束整个方法,不管这个 return处于多少层循环之内。