在java中标签作用的地方时在迭代语句之前。在标签和迭代之前置入任何语句都是不好的。而在迭代之前设置标签的唯一理由是:我们希望潜逃另一个迭代或者一个开关。这是由于break和continue关键词通常只中断当前循环,但若随标签一起使用,他们就会中断循环,知道标签所在的地方:
标签的语法
label1:
label1:
outer-iteration{
inner-iteration{
//….
break;//(1)
//…..
continue;//(2)
//…..
break label1;//(3)
//…..
continue label1;//(4)
在(1)中break会中断内层循环回到外部循环,在(2)中continue回结束内层循环的本次循环回到内部循环的起始点。在(3)中,break lable1中因为break后面加了label1所以会直接中断所有循环回到标签处,但不重新进入循环,也就是说直接终止了两个循环,而(4)中continue label1则会直接中断内部与外部循环回到标签处,随后继续循环,但是从外部循环开始。
public class labeledFor{
public static void main(String [] args){
int i = 0;
outer:
for(;;){
inner:
for(;i<10;i++){
System.out.print(“i=”+i);
if(i == 2){
System.out.print(“continue”);
continue;
}
if(i == 3){
System.out.print(“break”);
i++;
break;
}
if(i == 7){
System.out.print(“continue outer”);
i++;
continue outer;
}
if(i == 8){
System.out.print(“breaj outer”);
break outer;
}
for(int k=0;k < 5;k++){
if(k==3){
System.out.print(“continue inner”);
continue inner;
}
}
}
}
}
}
输出
i=0
continue inner
i=1
continue inner
i=2
continue
i=3
break
i=4
continue inner
i=5
continue inner
i=6
continue inner
i=7
continue outer
i=8
break outer
break会中断for循环,而且在抵达for循环末尾时,递增表达式不会执行,由于break跳过了递增表达,所以在i==3的情况下直接对i执行递增运算。在i==7的情况下,continue outer语句也会跳到循环顶部,而且也跳过递增。所以这里也对i进行了直接递增
如果没有break outer,就无法直接同时终止2个循环,如果想在终止循环的同时退出,可以使用return关键字。