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,这玩意太难控制。