Java label 用法

语法 用法
在某些语句块之前增加 label: 冒号 : 之后是被 label 修饰的语句块,可以通过这个达到类似 goto 语句的效果
常用方式 在一个循环或者嵌套循环中使用 label 达到类似使用 goto 语法的效果
关键词 break 该关键词的语法和 goto 类似,一旦使用 break 到达某个 label 那么就不会再次执行 label 语句块内的代码(例如循环)
关键词 continue 使用 continue 配合 label 的效果为仅仅打断此 label 代码一次,外层循环还可以

    public static void main(String args[]) {
        outer: for (int i = 0; i < 3; i++) {
            DPConstants.PRTMsg("Pass i 我是最外层的数据 " + i + ":");
            inner: for (int j = 0; j < 6; j++) {
                if (j == 3) {
                    // 这里是 break 的话就直接把内外层循环都终止了
                    // 这里是 continue 的话仅仅终止内部满足条件的循环
                    continue outer; // exit both loops
                }
                // 我把 J 的打印移动到 下面 continue / break label之前才可以打印
                DPConstants.PRTMsg("<<<<<<<<<      J  " + j + " ");
                for (int j2 = 0; j2 < 10; j2++) {
                    if (j2 == 3) {
                        // 这里如果 continue 那么下面 J 相关的永远道不了,
                        // 除非使用 break 打断这个 inner
                        continue inner;
                    }
                    DPConstants.PRTMsg(">>>>>> J2 " + j2 + " ");
                }
            }
            DPConstants.PRTMsg("This will notprint");
        }
        DPConstants.PRTMsg("Loops complete.");
    }

总结

label 的用法是为了弥补 Java 没有 goto 语句的缺陷,就像各位大佬说的,不建议用 goto ,Java 这个应该是弱化的 goto,只能直接作用与一个 语句块,但是经过例子我们可以看出,这玩意虽然在类似 goto 的语境下有作用,但是用起来还是很蛋疼,除非有这种一言不合跳出来循环又要执行下面代码的奇葩需求,不然还是老老实实写正常代码,少用或者不用 label,这玩意太难控制。