带标签的continue是处理多层嵌套中“整行/整块跳过”的最直接方式,适用于矩阵遍历、规则校验等场景;标签须为合法标识符并紧贴外层循环语句,仅对该循环及其内嵌有效,执行时跳回标签循环头部继续判断。

带标签的 continue 是处理多层嵌套中“整行/整块跳过”逻辑最直接的方式,尤其适合矩阵遍历、规则校验、数据清洗等需要按组过滤的场景。它不依赖额外状态变量,语义清晰,执行路径可控。
给外层循环加合法标签
标签必须是合法标识符(如 matrixRow、outer),后跟冒号,紧贴在 for/while 语句之前,中间不能有空行、注释或任何其他语句。
- ✅ 正确:
matrixRow: for (int i = 0; i < rows; i++) { ... } - ❌ 错误:
matrixRow: // 注释或matrixRow: ; for (...) {...}或换行后写循环 - 标签只对它所标记的循环及其内部嵌套有效,不能跨作用域引用
在内层触发 continue 标签名
当检测到某行需整体跳过(如首列为 -1、校验失败、权限不足),直接在内层写 continue 标签名;,程序立即退出所有内层循环,回到标签所在循环头部,执行变量更新和条件判断,进入下一轮。
- 例如:二维数组中,若
matrix[i][0] == -1,则整行不应参与后续列处理 -
continue matrixRow;后,i会正常自增,下一轮从i+1开始 - 注意:不是跳到下一行开头,而是跳到外层循环的“判断条件处”,所以仍遵循
i++和i < rows
典型矩阵过滤任务示例
假设要遍历一个整数矩阵,跳过所有首元素为负数的行,并对剩余每行中大于 10 的数求和:
matrixRow: for (int i = 0; i < matrix.length; i++) {
if (matrix[i][0] < 0) {
continue matrixRow; // 整行跳过,不进内层
}
int rowSum = 0;
for (int j = 0; j < matrix[i].length; j++) {
if (matrix[i][j] > 10) {
rowSum += matrix[i][j];
}
}
System.out.println("Row " + i + " sum: " + rowSum);
}
- 没有标签时,
continue只能跳过当前列(j循环),无法阻止该行进入内层计算 - 用
matrixRow标签后,检测到matrix[i][0] < 0就彻底跳过整行逻辑,包括初始化、累加、打印 - 比用布尔标志位(如
skipThisRow)更简洁,避免污染变量、减少分支嵌套
容易踩的坑
常见错误往往源于对标签作用域或 continue 行为的理解偏差:
-
continue(无标签)永远只影响最近一层循环,和缩进无关;想控外层,必须加标签 -
break 标签名是跳出整个外层循环,continue 标签名是跳回外层循环开头——两者行为完全不同 - 标签不能标在 if、try 或方法上,仅适用于 for / while / do-while
- Java、JavaScript 支持带标签 continue;Python 和 Go 不支持,需改用函数封装或标志位

















