Java冷知识:带标签的break、continue

122 阅读1分钟

概述

Java保留了goto关键字,但是不提供使用。
带标签的breakcontinue可以实现部分goto效果。
比如:跳出多层循环、跳出指定语句块....

原理

mark:    标签,在语句块上方进行标记
break mark;    使程序直接跳转到mark标记的语句块结束处。
continue mark;    使程序跳转到指定循环体的下一次循环。

案例

1、break 跳出多层循环

public void testGoto() {
    mark:
    for (int i = 0; i < 10; i++) {
        System.out.println("外层循环开始,第"+i+"次");
        for (int j = 0; j < 10; j++) {
            System.out.println("-中层循环开始,第"+j+"次");
            for (int k = 0; k < 10; k++) {
                System.out.println("--内层循环开始,第"+k+"次");
                if(k==5){
                    // 循环第5次的时候结束整个循环
                    break mark;
                }
            }
        }
    }
    System.out.println("程序运行结束!");
}

2、break 跳出指定语句块

public void testBreak() {
    mark:
    {
        System.out.println("业务操作1");
        System.out.println("业务操作2");
        System.out.println("业务操作3");
        if(1>0){
            // 条件成立,跳出标记的语句块
            break mark;
        }
        System.out.println("业务操作4");
        System.out.println("业务操作5");
    }
    System.out.println("程序运行结束!");
}

3、continue跳到指定的下一次循环中

public void testGoto() {
    mark:
    for (int i = 0; i < 10; i++) {
        System.out.println("外层循环开始,第"+i+"次");
        for (int j = 0; j < 10; j++) {
            System.out.println("-中层循环开始,第"+j+"次");
            for (int k = 0; k < 10; k++) {
                System.out.println("--内层循环开始,第"+k+"次");
                if(k==5){
                    // 循环第5次的时候,跳转到最外层循环的下一次循环
                    continue mark;
                }
            }
        }
    }
    System.out.println("程序运行结束!");
}