目录

带标签的 continue 与 break

陈述

带标签的 breakcontinue 一般用于中断控制流程。

break :不带标签只会退出内部循环,带标签可以退出标签所在的那层循环。break相比continue来说,还可以用于跳出语句块!

continue:不带标签只会继续内部循环的下一次迭代,带标签可以继续标签所在的那层循环的下一次迭代。

验证

public class LoopWithLabel {

    public static void forLoop() {
        int a = 0;
        label: for (int i = 0; i < 100; i++) {
            for (int j = 0; j < 100; j++) {
                if (i == 10) {
                    break label;
                }
                a++;
            }
        }
        System.out.println(a);  // 理论上应该加了 10 * 100 次
    }

    public static void whileLoop() {
        int a = 0, i = 0;
        here: while (i < 100) {
            int j = 0;
            while (j < 100) {
                if (i == 10) {
                    i++;  // 没有它就会死循环,因为 i 一直是 10
                    continue here;
                }
                a++;
                j++;
            }
            i++;
        }
        System.out.println(a);  // 理论上应该加了 99 * 100 次
    }

    public static void main(String[] args) {
        forLoop();
        whileLoop();
    }
}

输出:

1000
9900

思考

由于,break相比continue来说,还可以用于跳出语句块,因此:

带标签的 break 可以用来实现 Python 里面的 while-else 语句。

Java允许在语句前加上标签前缀,构成标签(label)语句。其一般格式为:标识符:语句

public static void whileElse() {
  boolean[] visited = new boolean[10];
  visited[8] = true;
  int i = 0;
  // 检查,如果全都是 false 就输出检查通过,否则输出检查不通过
  label: {
    while (i < 10) {
      if (visited[i++]) {
        System.out.println("检查不通过!");
        break label;
      }
    }
    System.out.println("检查通过!");
  }
}

输出:

检查不通过!

结论

continue只能用于循环标签,也就是说这个标签必须标在循环语句上。

break能作用于任何语句标签,可以是普通语句块、循环等。