杰瑞科技汇

Java中continue的用法有哪些?

continue 是 Java 中的一个关键字,它属于流程控制语句,它的核心作用是:立即终止当前正在执行的循环迭代,并跳转到循环的条件判断部分,准备开始下一次迭代。

Java中continue的用法有哪些?-图1
(图片来源网络,侵删)

可以把它想象成:老师正在检查一个小组的作业,当你(continue)发现某个同学的作业有严重错误时,你立刻跳过对他的所有检查(break 会直接让你离开整个小组),并直接开始检查下一位同学。


continue 的基本工作原理

continue 只能用在循环语句中,包括 for 循环、while 循环和 do-while 循环。

continue 语句被执行时:

  1. 程序会立即跳过当前循环体中 continue 语句之后的所有代码。
  2. 直接进入循环的“更新”或“条件判断”阶段。
    • for 循环中,会执行 for 语句的第三部分(i++ 等)。
    • whiledo-while 循环中,会直接跳转到条件判断表达式。

continue 在不同循环中的具体用法

for 循环中

这是最常见的使用场景。continue 会跳过当前迭代中剩余的代码,然后执行 i++,再进行条件判断。

Java中continue的用法有哪些?-图2
(图片来源网络,侵删)

示例:打印 1 到 10 之间除了 5 以外的所有数字

public class ContinueExample {
    public static void main(String[] args) {
        System.out.println("--- 在 for 循环中使用 continue ---");
        for (int i = 1; i <= 10; i++) {
            // i 等于 5,就跳过本次循环的剩余部分
            if (i == 5) {
                continue; // 跳转到 i++,然后判断 i <= 10
            }
            // 这行代码在 i == 5 时不会被执行
            System.out.println("当前数字是: " + i);
        }
    }
}

执行流程分析:

  • i 为 1, 2, 3, 4, 6, 7, 8, 9, 10 时,if 条件不成立,System.out.println 正常执行。
  • i 为 5 时,if (i == 5) 条件成立,continue 语句被执行。
  • 程序立即跳过 System.out.println("当前数字是: " + i); 这一行。
  • 直接执行 for 循环的 i++i 变为 6。
  • 然后判断 i <= 10,成立,继续下一次循环。

输出结果:

--- 在 for 循环中使用 continue ---
当前数字是: 1
当前数字是: 2
当前数字是: 3
当前数字是: 4
当前数字是: 6
当前数字是: 7
当前数字是: 8
当前数字是: 9
当前数字是: 10

while 循环中

while 循环中,continue 会跳过剩余代码,然后直接跳转到 while 的条件判断部分。

Java中continue的用法有哪些?-图3
(图片来源网络,侵删)

示例:跳过负数,只打印正数

public class ContinueWhileExample {
    public static void main(String[] args) {
        System.out.println("--- 在 while 循环中使用 continue ---");
        int i = -2;
        while (i < 5) {
            if (i < 0) {
                i++; // 必须在这里递增,否则会进入死循环!
                continue; // 跳过打印,直接跳转到 while (i < 5) 判断
            }
            System.out.println("当前数字是: " + i);
            i++;
        }
    }
}

执行流程分析:

  • i 初始为 -2。
  • while (i < 5) 成立。
  • if (i < 0) 成立,执行 i++i 变为 -1),然后执行 continue
  • 跳过 System.out.println,直接跳转到 while (i < 5) 判断。
  • i 仍为 -1,循环继续。
  • 再次进入 ifi++i 变为 0),continue
  • 跳过打印,再次判断 while (i < 5)
  • i 为 0,if 条件不成立,打印 "当前数字是: 0",i++
  • ...以此类推,直到 i 为 5 时,循环结束。

输出结果:

--- 在 while 循环中使用 continue ---
当前数字是: 0
当前数字是: 1
当前数字是: 2
当前数字是: 3
当前数字是: 4

⚠️ 重要提示:whiledo-while 循环中使用 continue 时,要确保循环变量的值在 continue 执行前得到改变,否则可能会导致死循环,上面的例子中,我们在 continue 之前加了 i++,就是为了避免这个问题。

do-while 循环中

do-while 的工作原理与 while 类似,continue 也会跳到条件判断部分,唯一的区别是 do-while 至少会执行一次。


带标签的 continue (Labeled `continue)

这是 continue 一个更强大但相对少见的用法,它允许你从一个嵌套循环中直接跳转到外层循环的指定位置。

语法: continue 外层循环的标签名;

为什么需要它? 考虑一个场景:我们有两个循环,内层和外层,在内层循环中,如果我们使用普通的 continue,它只会影响内层循环,如果我们想在内层循环的某个条件下,直接跳出整个内层循环,并让外层循环开始下一次迭代,就需要带标签的 continue

示例:在一个 5x5 的矩阵中,当行号和列号相等时(即对角线),跳过当前行的剩余列,直接开始下一行的迭代。

public class LabeledContinueExample {
    public static void main(String[] args) {
        System.out.println("--- 使用带标签的 continue ---");
        // 为外层循环定义一个标签 "outerRow"
        outerRow:
        for (int row = 0; row < 5; row++) {
            System.out.println("\n--- 开始处理第 " + (row + 1) + " 行 ---");
            for (int col = 0; col < 5; col++) {
                // 如果列号等于行号,就跳转到 outerRow 标记的位置
                if (col == row) {
                    System.out.println("  在 (" + row + ", " + col + ") 处遇到对角线,跳过此行剩余列。");
                    continue outerRow; // 跳转到外层循环的下一轮
                }
                System.out.println("  处理元素 (" + row + ", " + col + ")");
            }
            // 这里的代码永远不会被执行,因为 continue outerRow 已经跳出了整个内层循环
            System.out.println("  这行代码不会被打印。");
        }
    }
}

执行流程分析:

  • 外层循环 row 从 0 到 4。
  • row = 0:
    • 内层循环 col 从 0 开始。
    • col = 0col == row 成立,执行 continue outerRow
    • 程序立即跳转到外层循环 outerRow: 的末尾,row 变为 1,开始下一轮外层循环。
  • row = 1:
    • 内层循环 col 从 0 开始。
    • col = 1col == row 成立,执行 continue outerRow
    • 程序再次跳转到外层循环,row 变为 2,开始下一轮。
  • ...以此类推。

输出结果:

--- 使用带标签的 continue ---
--- 开始处理第 1 行 ---
  在 (0, 0) 处遇到对角线,跳过此行剩余列。
--- 开始处理第 2 行 ---
  处理元素 (1, 0)
  在 (1, 1) 处遇到对角线,跳过此行剩余列。
--- 开始处理第 3 行 ---
  处理元素 (2, 0)
  处理元素 (2, 1)
  在 (2, 2) 处遇到对角线,跳过此行剩余列。
--- 开始处理第 4 行 ---
  处理元素 (3, 0)
  处理元素 (3, 1)
  处理元素 (3, 2)
  在 (3, 3) 处遇到对角线,跳过此行剩余列。
--- 开始处理第 5 行 ---
  处理元素 (4, 0)
  处理元素 (4, 1)
  处理元素 (4, 2)
  处理元素 (4, 3)
  在 (4, 4) 处遇到对角线,跳过此行剩余列。

continuebreak 的关键区别

特性 continue break
作用 跳过当前迭代的剩余部分,继续下一次迭代。 终止整个循环,循环不再继续执行。
影响范围 只影响它所在的一层循环 只影响它所在的一层循环(除非与标签配合)。
带标签用法 continue label; 可以跳转到外层循环的下一次迭代。 break label; 可以跳出外层循环本身。
比喻 “这个同学不对,不检查他了,检查下一个。” “这个小组全都不用检查了,我们直接解散。”

示例对比:

// continue 的例子
for (int i = 1; i <= 5; i++) {
    if (i == 3) continue;
    System.out.print(i + " "); // 输出: 1 2 4 5
}
// break 的例子
for (int i = 1; i <= 5; i++) {
    if (i == 3) break;
    System.out.print(i + " "); // 输出: 1 2
}

最佳实践和注意事项

  1. 避免过度使用continue 可以让代码逻辑更清晰(处理一个“特殊情况”后跳过),但如果滥用,尤其是多层嵌套时,会使代码流程变得难以追踪,有时,使用 if-else 结构会更加直观。

    • 可读性差
      for (int i = 0; i < items.length; i++) {
          if (items[i] == null) {
              continue;
          }
          // 处理 items[i]
      }
    • 可读性好
      for (int i = 0; i < items.length; i++) {
          if (items[i] != null) {
              // 处理 items[i]
          }
      }

      第二种写法通常更符合“正面编程”的思想,即“当满足条件时执行”,而不是“当不满足条件时跳过”。

  2. 小心死循环:如前所述,在 whiledo-while 循环中,确保在 continue 之前更新循环变量,否则可能导致无限循环。

  3. 标签命名要清晰:在使用带标签的 continue 时,标签名应该具有描述性(如 outerRow, searchLoop),以便于理解其跳转的目标。

用法 描述 示例
基本用法 跳过当前循环迭代,进入下一次。 for (int i=0; i<10; i++) { if (i%2==0) continue; ... }
while 跳转到条件判断,注意更新循环变量。 while (i < 10) { if (i < 0) { i++; continue; } ... }
带标签用法 从内层循环跳转到外层循环的下一次迭代。 outer: for (...) { for (...) { if (...) continue outer; } }

理解 continue 的核心思想是“跳过本次,继续下次”,并与 break 的“彻底终止”明确区分开,就能在 Java 编程中熟练、正确地使用它。

分享:
扫描分享到社交APP
上一篇
下一篇