continue只能在循环体内使用,用于跳过当前迭代剩余语句并进入下一次循环判断;若脱离for/while/do-while上下文,编译报错;支持带标签语法跳出指定外层循环。

continue 只能在循环体内使用
Java 中 continue 的作用是跳过当前迭代的剩余语句,直接进入下一次循环判断。但它不能脱离循环上下文——如果写在 if 块里却不在 for、while 或 do-while 内部,编译器会报错 continue outside of loop。
常见误用场景:
- 把
continue放在方法体开头的if判断中,没包在任何循环里 - 在 lambda 表达式或局部函数(如
Stream.forEach())里试图用continue——这不行,lambda 没有循环结构,它只是回调 - 想跳出外层循环却只写了单个
continue,结果只影响最近的内层循环
带标签的 continue 能跳出指定外层循环
当嵌套多层循环时,普通 continue 只作用于最内层。要跳过外层某次迭代,得用带标签的写法:
outer:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) {
continue outer; // 跳到 outer 循环的下一轮 i++
}
System.out.println(i + "," + j);
}
}
注意点:
立即学习“Java免费学习笔记(深入)”;
- 标签名后必须跟冒号
:,且紧贴循环语句(中间不能换行或空语句) - 标签只能用于
for、while、do-while,不能标在if或代码块上 - IDE 通常不检查标签作用域,写错位置(比如标在
if上)会导致编译失败但错误提示较模糊
continue 和 break 的关键区别别搞混
两者都改变控制流,但语义完全不同:
-
continue是“这次不做了,直接 check 下一次条件”——循环变量照常更新(如for中的i++仍执行) -
break是“整个循环结束”,不再判断条件,也不再更新变量 - 在
while(true)这类无限循环中,continue容易导致死循环——因为跳过了可能修改循环变量的代码,下次还进同一分支
例如这段容易出错的代码:
int i = 0;
while (i < 5) {
if (i == 2) continue; // 忘了 i++,i 永远卡在 2
System.out.println(i);
i++;
}
替代 continue 的更清晰写法
过度依赖 continue 会让逻辑嵌套变深,尤其多条件组合时。可考虑提前 return(在方法内)、提取判断为布尔变量,或用卫语句(guard clause):
// 不推荐:多层 continue
for (String s : list) {
if (s == null) continue;
if (s.isEmpty()) continue;
if (!s.startsWith("A")) continue;
process(s);
}
// 推荐:用 if + return(process 封装成方法)
for (String s : list) {
if (s == null || s.isEmpty() || !s.startsWith("A")) continue;
process(s);
}
// 或更直白:
for (String s : list) {
if (isValid(s)) {
process(s);
}
}
真正难处理的是嵌套循环中需跳过外层某次迭代的场景——这时带标签的 continue 仍是简洁解法,但务必确认标签位置和作用域,否则运行时行为和预期偏差很大。









