在 Java 中,break 和 continue 是两种常用的控制流语句,用于控制循环或 switch 语句的执行流程。它们的功能和使用场景各有不同,以下是详细说明。
一、break 语句
break 用于退出循环或 switch 语句。
例:在数组中找到目标值 333 时退出搜索。
java
public static void main(String[] args) {
int[] intary = { 99,12,22,34,45,67,333,8990 };
int num = 333;
int i = 0;
boolean found = false;
for ( ; i < intary.length; i++) { //变量i需要在for的外部声明,因为外部语句也用它
if (num == intary[i] ) {
found = true;
break; //找到目标值时退出搜索
}
}
if (found) {
System.out.println(num + " 元素的索引位置在: " + i);
}
else {
System.out.println(num + " 元素不在数组中");
}
}
运行结果:
333 元素的索引位置在: 6
二、continue 语句
continue 用于退出本次循环,继续进入下一次循环。
例:输出 10 以内的奇数,跳过偶数。
java
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // 如果是偶数,结束本次循环
}
System.out.print(i + "\t");
}
}
三、break 和 continue 的区别
1. 功能区别: break 直接退出循环。 continue 退出本次循环,继续进入下一次循环。
2. 使用场景区别: break 常用于提前终止循环,例如在找到目标值时退出搜索。 continue 常用于跳过不需要处理的元素,例如过滤无效数据。
四、嵌套循环中的 break 语句
当两个循环嵌套时,如果 break 语句位于内层循环,它只会退出内层循环,但不会退出外层循环。
例:
java
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) {
break; // 跳出内层循环
}
System.out.println("i: " + i + ", j: " + j);
}
}
}
运行结果:
i: 0, j: 0
i: 0, j: 1
i: 0, j: 2
i: 1, j: 0
i: 2, j: 0
i: 2, j: 1
i: 2, j: 2
五、带标签的 break 语句
带标签的 break 语句,是 Java 对 break 语句的一种扩展形式,用来处理退出多层嵌套循环这个问题。
标签(Label)是一种用于标识代码块的标识符。标签可以是任何合法有效的 Java 标识符,后面跟一个冒号。
标签的语法形式:
labelName:
带标签的 break 语句可以从多层嵌套循环中直接退出。使用时,标签要写在多层嵌套循环代码块的上面,而 break 语句后面要带着标签名。
例:用带标签的 break 语句退出外层循环。
java
public static void main(String[] args) {
outerLoop: // 标签
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) {
break outerLoop; // 带标签的break
}
System.out.println("i: " + i + ", j: " + j);
}
}
}
运行结果:
i: 0, j: 0
i: 0, j: 1
i: 0, j: 2
i: 1, j: 0
**注意:**使用带标签的 break 语句退出多层嵌套循环时,被加标签的代码块必须包围 break 语句。也就是说,带标签的 break 语句只能用于退出它所在的多层嵌套循环,而不能用于跳转到不包含它的代码块。也就是说,带标签的 break 语句并不是 goto 语句。
同时,除了有带标签的 break 外,java 中还有带标签的 continue,用于退出外部循环的本次执行,继续进入外部循环的下一次执行。