label:
outer-iteration {
inner-iteration{
//...
break; // (1)
//...
continue; // (2)
//...
continue label; // (3)
//...
break label; // (4)
}
}
在(1)中,break中断内部迭代,回到外部迭代。
在(2)中,continue使执行点移回内部迭代的起始处。
在(3)中,continue label同时中断内部迭代以及外部迭代,直接跳转到label处。它实际上是继续迭代过程,但却从外部迭代开始。
在(4)中,break label也会中断所有迭代,并回到label处,但并不重新进入迭代。
static void labeledFor() {
int i = 0;
outer: // Can't have statements here
for ( ; true; ){ // infinite loop
inner: // Can't have statements here
for ( ; i<10; i++){
println("i=" + i);
if (i == 2){
println("continue");
continue;
}
if (i == 3){
println("break");
i++; // Otherwise i never gets incremented
break;
}
if (i == 7){
println("continue outer");
i++; // Otherwise i never gets incremented
continue outer;
}
if (i == 8){
println("break outer");
break outer;
}
for (int k = 0; k < 5; k++){
if (k == 3){
println("continue inner");
continue inner;
}
}
}
}
// Can't break or continue to label here
} /* Output:
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
*///:~
网友评论