关于在循环体中使用标签跳出内层循环的问题,不知道这个语法糖是JDK几以后加入的,这个语法平时几乎很少遇到,应为一般情况下满足条件后终止循环的关键字 通常使用break结束当前循环体,continue用来跳过本次的循环继续其后的当前循环体内的循环,return则直接跳出外层的循环体结束循环。而标签这个东西我还是最近在《疯狂的JAVA讲义》中看到的,编程开发嘛光看不练假把式。
public class Main {
public static void main(String[] args) {
out:
for (int i = 0 ; i < 10 ; i ++ ){
System.out.println("\ti:".concat(String.valueOf(i)));
for (int j = 0; j <5;j++){
if (j == 2){
continue out;
}
System.out.println("\t\tj:".concat(String.valueOf(j)));
}
}
}
}
执行结果:
i:0
j:0
j:1
i:1
j:0
j:1
i:2
j:0
j:1
i:3
j:0
j:1
i:4
j:0
j:1
i:5
j:0
j:1
i:6
j:0
j:1
i:7
j:0
j:1
i:8
j:0
j:1
i:9
j:0
j:1
在内层循环中每到第三个元素时就会跳出当前循环体回到标签out 指定的位置。
语法糖说完后有两个注意事项:
1.编写异常:
public class Main {
public static void main(String[] args) {
out:
System.out.println("\ti:".concat("a");
for (int i = 0 ; i < 10 ; i ++ ){
System.out.println("\ti:".concat(String.valueOf(i)));
for (int j = 0; j <5;j++){
if (j == 2){
continue out;
}
System.out.println("\t\tj:".concat(String.valueOf(j)));
}
}
}
}
我们指定的标签必需紧邻循环体,中间不能加任何的语句,下面的写法会在编译的时候报书写错误,IDE的语法检查也会标记,但是快速无法自动修复问题和给出良好的建议,所以大家尽量避免
public class Main {
public static void main(String[] args) {
out:
System.out.println("\ti:".concat("a"));
for (int i = 0 ; i < 10 ; i ++ ){
System.out.println("\ti:".concat(String.valueOf(i)));
for (int j = 0; j <5;j++){
if (j == 2){
continue out;
}
System.out.println("\t\tj:".concat(String.valueOf(j)));
}
}
}
}
2.一些无意义的使用场景,
- 情景一:标记条件位于循环体最后一个执行元素,就例如示例代码中的内层循环,如果把循环控制条件由j<5改为j<3则其实当碰到out标签时本来就应该结束的当前的循环,所以没有任何意义;
- 情景二:就是非多层循环嵌套时定义不定义这个标签显然是毫无意义的。