不知道大家有没有这样一种感受哈,有的时候容易混淆break语句和continue语句的用法,总是模棱两可,不敢确定自己是否使用正确了。正好,我们本篇的重点就是break和continue关键字的用法。
Java中为啥会诞生break
和continue
关键字呢?其主要目的是用来中断流程控制语句,例如switch语句、for循环。
上面提到了switch语句,那么我们先来看看switch语句的用法。
String season = "Spring";
switch (season) {
case "Spring":
System.out.println("春天花会开,鸟儿自由自在");
break;
case "Summer":
System.out.println("接天莲叶无穷碧,映日荷花别样红");
break;
case "Autumn":
System.out.println("人生若只如初见,何事秋风悲画扇");
break;
case "Winter":
System.out.println("孤舟蓑笠翁,独钓寒江雪");
break;
default:
System.out.println("原来岁月这般温柔");
break;
}
switch语句将从与选项值相匹配的case标签处开始执行,直到遇到break语句,或者执行到switch语句的结束处为止。如果没有匹配的case标签,则会执行default语句。
可以看到,break语句在switch语句起到了中断流程的作用,试想一下,如果在case语句中没有break语句,那么就会接着执行下一个case语句,就会引发程序结果的错误。
好的,我们再来回顾一下,case标签支持的类型:char、byte、short、int、String。
1)结束当前层循环
代码示例:
List<String> seasons = List.of("Spring", "Summer", "Autumn", "Winter");
for (String season : seasons) {
if ("Spring".equals(season)) {
System.out.println("春天花会开,鸟儿自由自在!");
break;
}
System.out.println("岁月静好");
}
// 执行结果:春天花会开,鸟儿自由自在!
以上代码的执行结果中并不会执行循环体的最后一句代码,因为当if条件成立时,就会结束当前层的循环。请注意,这里特别强调是当前层
(表示break所处的这个循环体),为什么会有当前层
这个说法呢?很多时候,我们在处理数据的时候,会用到嵌套循环。好的,我们来看个嵌套循环的案例:
List<String> cities = List.of("成都", "昆明");
List<String> seasons = List.of("Spring", "Summer", "Autumn", "Winter");
for (String city : cities) {
if ("成都".equals(city)) {
for (String season : seasons) {
if ("Summer".equals(season)) {
System.out.println(season + ":接天莲叶无穷碧,映日荷花别样红");
break;
}
}
System.out.println(city + ":蜀道难,难于上青天");
}
if ("昆明".equals(city)) {
System.out.println(city + ",又名春城,这里四季如春");
}
}
// 执行结果为:
// Summer:接天莲叶无穷碧,映日荷花别样红
// 成都:蜀道难,难于上青天
// 昆明,又名春城,这里四季如春
从以上代码的执行结果可以看出,break语句只是结束了它所在的循环体,并不会影响外层循环体的执行。那么有没有办法可以结束整个循环体的执行呢?解决方法肯定是有的。
2)结束整个循环
flag:
for (String city : cities) {
if ("成都".equals(city)) {
for (String season : seasons) {
if ("Summer".equals(season)) {
System.out.println(season + ":接天莲叶无穷碧,映日荷花别样红");
break flag;
}
}
System.out.println(city + ":蜀道难,难于上青天");
}
if ("昆明".equals(city)) {
System.out.println(city + ",又名春城,这里四季如春");
}
}
// 执行结果:Summer:接天莲叶无穷碧,映日荷花别样红
结束整个循环,需要配合标签来完成,在循环体前定义一个标签,格式为lable:
,就可以配合break关键字来完成结束整体循环。
break语句用法:
1)用在switch语句中,结束case标签语句的执行。
2)用在循环体内,表示结束当前循环。
3)配合lable:
标签语法,结束定义在标签之后的循环体,可用于嵌套循环时,结束整个循环。
与break语句一样,也可以用来中断流程控制语句,break语句是结束当前循环体的执行,而continue语句是结束当前循环体中本次循环的执行,continue语句之后的剩余部分的代码不会被执行,而是直接进行下次循环。
示例代码:
List<String> seasons = List.of("Spring", "Summer", "Autumn", "Winter");
for (String season : seasons) {
if ("Summer".equals(season)) {
System.out.println(season + ":接天莲叶无穷碧,映日荷花别样红");
continue;
}
System.out.println(season + ":岁月静好");
}
// 执行结果:
// Spring:岁月静好
// Summer:接天莲叶无穷碧,映日荷花别样红
// Autumn:岁月静好
// Winter:岁月静好
根据执行结果可以看出,continue语句之后的代码没有被执行,起到了跳过本次循环体的作用。