java中,我们通常熟悉的是通过break和continue两个关键字来控制程序的走向,当需要程序从一个地方跳到另一个地方时,就需要要通过标签来实现,下面通过一个例子来讲述标签的使用方式。
标签是后面跟着冒号的标识符,就像下面这样:
label:
java中,标签起作用的最好的地方是放在迭代语句之前,在标签和迭代之间置入任何语句都不好。在迭代前设置标签的唯一理由是:我们希望在其中嵌套另一个迭代或者一个开关。
将break和continue与标签一起使用,它们就会中断循环,直到标签所在的地方。
label1:
outer-iteration{
inner-iteration{
break; (1)
continue; (2)
continue label1; (3)
break label; (4)
}
}
在(1)中,break中断内部迭代,回到外部迭代。
在(2)中,continue使执行点移回内部迭代的起始处。
在(3)中,continue label1 同时中断内部迭代以及外部迭代,直接转到label1处,随后,它实际上是继续迭代过程,但是是从外部迭代开始。
在(4)中,break label1 也会中断所有迭代,并回到label1处,但并不重新进入迭代,也就是说,它是完全终止了两个迭代。
public class MainTest {
public static void main(String[] args) {
int i = 0;
outer:
for(;true;){
inner:
for(;i<10;i++){
System.out.println("i="+i);
if(i == 2){
System.out.println("continue");
continue ;
}
if(i == 3){
System.out.println("break");
i++;
break ;
}
if(i == 7){
System.out.println("continue outer");
i++;
continue outer;
}
if(i == 8){
System.out.println("break outer");
break outer;
}
for(int k =0; k<5;k++){
if(k==3){
System.out.println("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和continue在while循环中的用法:
public class LabelWhile {
public static void main(String[] args) {
int i = 0;
outer:
while(true){
System.out.println("Outer while loop");
while(true){
i++;
System.out.println("i="+i);
if(i==1){
System.out.println("continue");
continue ;
}
if(i == 3){
System.out.println("continue outer");
continue outer;
}
if(i == 5){
System.out.println("break");
break ;
}
if(i==7){
System.out.println("break outer");
break outer;
}
}
}
}
}
//#########打印输出##########
Outer while loop
i=1
continue
i=2
i=3
continue outer
Outer while loop
i=4
i=5
break
Outer while loop
i=6
i=7
break outer
1)一般的continue会退回最内层循环的开头(顶部),并继续执行。
2)带标签的continue会到达标签的位置,并重新进入紧接在那个标签后面的循环。
3)一般的break会中断并跳出当前循环。
4)带标签的break会中断并跳出标签所指的循环。