continue仅中断当前迭代,不终止循环;for中先执行迭代语句再判断条件,while/do-while中直接判断条件;必须在循环内使用;带标签continue可跳出多层循环。

continue 会立即跳过当前循环体剩余代码
它不终止整个循环,只中断本轮迭代,直接进入下一次循环判断。常见于需要过滤某些条件、避免嵌套 if 的场景。
- 在
for中:执行完continue后,先运行「迭代语句」(如i++),再判断循环条件 - 在
while和do-while中:跳过剩余逻辑后,直接回到循环条件判断 - 不能脱离循环单独使用,否则编译报错:
continue outside of loop
带标签的 continue 可跳出多层嵌套循环
当有外层循环需要被跳过时,仅靠普通 continue 不够用。Java 支持用标签指定目标循环,类似 goto 的受限替代方案。
outer:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) {
continue outer; // 跳到 outer 循环的下一轮,即 i=2
}
System.out.println(i + "," + j);
}
}
- 标签名后必须跟冒号,且必须紧贴在循环语句前(中间不能有分号或空行)
- 标签作用域仅限于其标注的循环及其内部,不能跨方法或跨作用域引用
- 过度使用带标签的
continue会让控制流难追踪,建议优先重构为方法拆分或布尔标志位
continue 和 break 的关键区别
两者都改变循环流程,但语义和影响范围不同:
-
break终止**整个**当前循环,跳出循环体;continue只跳过**本轮**剩余代码 - 在
switch中只能用break,continue编译不通过(因为 switch 不是循环) - 在增强
for(for-each)中,continue表示跳到集合下一个元素;break则退出整个遍历
容易踩的坑:continue 在 try-catch 或 finally 中的行为
如果 continue 出现在 try 或 catch 块里,finally 仍会执行——这是很多人忽略的关键点。
立即学习“Java免费学习笔记(深入)”;
for (int i = 0; i < 3; i++) {
try {
if (i == 1) continue;
System.out.print("try:");
} finally {
System.out.print(" finally");
}
System.out.println(" after");
}
输出是:try: finally after try: finally try: finally after。注意第 i=1 次迭代中,continue 并未绕过 finally。
-
continue不等于「跳过整个循环体」,它只是把控制权交还给循环机制,而 JVM 规定finally必须执行 - 若想在异常或特定条件下完全跳过清理逻辑,需将
finally改为普通代码块,或用布尔变量控制
continue 和 finally 的交互最容易被低估——前者影响控制流方向,后者强制插入执行,二者叠加时行为不如表面直观。










