continue 是一个控制流语句,它的作用是立即终止当前正在执行的循环迭代,并跳转到循环的“更新”部分,然后开始下一次迭代。

continue 就像在循环中说:“这次循环剩下的代码不执行了,直接开始下一次循环吧!”
continue 的基本工作原理
continue 只能用在循环语句中,包括 for 循环、while 循环和 do-while 循环。
当程序执行到 continue 时:
- 跳过:当前循环体中
continue语句之后的所有代码。 - 继续:循环的迭代变量会更新(在
for循环中),然后循环的条件会重新被判断,如果条件为真,则开始下一次循环;如果为假,则循环结束。
continue 在不同循环中的具体行为
a) 在 for 循环中
在 for 循环中,continue 会跳过循环体剩余代码,然后执行 for 循环的 i++(或更新表达式),再判断条件。

示例: 打印 1 到 10 之间除了 5 以外的所有数字。
public class ContinueForExample {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
// i 等于 5,就跳过本次循环的剩余部分
if (i == 5) {
continue;
}
// 这行代码在 i == 5 时不会被执行
System.out.println("当前数字是: " + i);
}
}
}
执行流程分析:
i从 1 到 4,if条件为假,System.out.println正常执行。- 当
i变为 5 时,if (i == 5)为真,执行continue。 - 程序立即跳过
System.out.println(...)这一行。 - 程序跳转到
for循环的i++部分,i变为 6。 - 循环继续,直到
i变为 11,循环结束。
输出结果:
当前数字是: 1
当前数字是: 2
当前数字是: 3
当前数字是: 4
当前数字是: 6
当前数字是: 7
当前数字是: 8
当前数字是: 9
当前数字是: 10
b) 在 while 和 do-while 循环中
在 while 和 do-while 循环中,continue 会跳过循环体剩余代码,然后直接跳转到循环条件的判断部分。

示例: 使用 while 循环,打印 1 到 10 之间除了 5 以外的所有数字。
public class ContinueWhileExample {
public static void main(String[] args) {
int i = 1;
while (i <= 10) {
if (i == 5) {
i++; // 注意:必须在这里增加 i,否则会造成死循环!
continue;
}
System.out.println("当前数字是: " + i);
i++;
}
}
}
⚠️ 重要警告:
在 while 和 do-while 循环中使用 continue 时要非常小心!因为 continue 会直接跳转到条件判断,如果循环变量的更新在 continue 之后,就可能导致死循环。
错误示例:
int i = 1;
while (i <= 10) {
if (i == 5) {
continue; // 错误!i 永远不会增加,会一直等于 5,导致死循环
}
System.out.println("当前数字是: " + i);
i++;
}
在上面的错误代码中,当 i 变为 5 时,continue 被执行,程序跳转到 while (i <= 10) 的判断,由于 i 仍然是 5,条件为真,再次进入循环体,又一次执行 continue,无限循环下去。
正确做法:确保在 continue 之前,或者在 continue 跳转到的位置(即循环条件判断之前)更新循环变量,如上面的正确示例所示,我们在 continue 之前手动增加了 i。
带标签的 continue (Labeled `continue)
当 Java 程序中存在嵌套循环时,普通的 continue 只能跳出它所在的那一层循环,如果你想要直接跳出多层循环,可以使用带标签的 continue。
语法:
label_name:
for (...) {
for (...) {
if (condition) {
continue label_name; // 跳转到 label_name 所在的循环,开始下一次迭代
}
}
}
示例: 在一个二维数组中查找第一个负数,找到后就停止整个搜索过程。
public class LabeledContinueExample {
public static void main(String[] args) {
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, -8, 9},
{10, 11, 12}
};
boolean found = false;
// outer 是外层循环的标签
outer:
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
if (matrix[i][j] < 0) {
System.out.println("在位置 [" + i + "][" + j + "] 找到第一个负数: " + matrix[i][j]);
found = true;
// 使用带标签的 continue,直接跳出外层循环的下一次迭代
// 实际上这里用 break 更合适,但为了演示 continue,我们这么用
// 它会结束当前外层循环的本次迭代,i++,进入下一次外层循环
// 如果想完全终止所有循环,应该用 break outer;
continue outer;
}
System.out.println("检查了元素: " + matrix[i][j]);
}
System.out.println("--- 第 " + i + " 行检查完毕 ---");
}
if (!found) {
System.out.println("数组中没有找到负数。");
}
}
}
输出结果:
检查了元素: 1
检查了元素: 2
检查了元素: 3
--- 第 0 行检查完毕 ---
检查了元素: 4
检查了元素: 5
检查了元素: 6
--- 第 1 行检查完毕 ---
在位置 [2][1] 找到第一个负数: -8
检查了元素: 10
检查了元素: 11
检查了元素: 12
--- 第 3 行检查完毕 ---
在这个例子中,continue outer; 使得程序在找到 -8 后,直接跳转到外层循环的 i++ 部分,然后开始下一次外层循环(即 i 变为 3,遍历第四行),它并没有完全终止整个程序,只是提前结束了当前外层循环的本次迭代。
注意: 在上面的场景中,使用 break outer; 来完全终止所有循环会是更常见和更清晰的选择。continue 的主要用途是“跳过本次迭代”,而不是“终止循环”。
continue vs. break
初学者很容易混淆 continue 和 break,这里做一个清晰的对比:
| 特性 | continue |
break |
|---|---|---|
| 作用 | 跳过当前循环的剩余部分,直接进入下一次迭代。 | 完全终止并跳出当前所在的循环。 |
| 位置 | 只能在循环 (for, while, do-while) 内部使用。 |
可以在 switch 语句或循环内部使用。 |
| 对循环的影响 | 循环继续执行,只是当前次迭代提前结束。 | 循环完全终止,不再执行后续任何迭代。 |
| 带标签 | 可以和标签一起使用,跳转到指定标签的循环的下一次迭代。 | 可以和标签一起使用,跳出指定标签的循环。 |
一个简单的类比: 想象你在排队买咖啡。
break就是你买完咖啡后,觉得队伍太长,决定不买了,直接离开队伍回家。continue就是你排到一半,突然发现忘带钱包了,你跟前面的人说“不好意思,我出去一下,马上回来”,然后你跑出队伍去拿钱包,然后再回来排到原来的位置继续排队。
最佳实践和注意事项
- 谨慎使用:过度使用
continue会使代码逻辑变得难以理解和追踪,尤其是在复杂的嵌套循环中,有时,使用if-else结构会让代码更清晰。- 不推荐(过多使用 continue):
for (int i = 0; i < 10; i++) { if (i % 2 == 0) { continue; } // do something for odd numbers } - 推荐(更清晰的 if-else):
for (int i = 0; i < 10; i++) { if (i % 2 != 0) { // 只对奇数执行操作 // do something for odd numbers } }
- 不推荐(过多使用 continue):
- 注意
while/do-while循环中的死循环:如前所述,在while和do-while循环中,确保循环变量的更新不会被continue跳过。 continue在for-each循环中:在for-each循环中,continue的行为和普通的for循环一样,它会跳过当前迭代的剩余代码,并自动移动到集合/数组的下一个元素,你不需要担心索引更新的问题。
continue 是 Java 中一个有用的控制流工具,它的核心功能是提前结束当前循环迭代。
- 基本用法:在循环体内使用,跳过剩余代码,进入下一次迭代。
for循环:安全,会自动执行i++。while/do-while循环:需小心,要确保循环变量能被更新,否则可能导致死循环。- 带标签的
continue:用于嵌套循环,可以跳转到外层循环的下一次迭代。 - 与
break的区别:continue是“跳过本次”,break是“跳出整个循环”。
理解并正确使用 continue 可以帮助你写出更简洁、更高效的循环代码,但切记不要滥用,保持代码的可读性永远是第一位的。
