尽管goto仍是Java中的一个保留字,但在语言中并未使用它,Java没有goto。但是Java能通过break、continue关键字和便签机制实现类似于跳转的功能。
标签是后面跟有冒号的标识符,例如:‘lable1:’。
在Java中,标签起作用的唯一的地方刚好是在迭代语句之前,“刚好之前”的意思表明,在标签和迭代之间置入任何语句都不好。而在迭代之前设置标签的唯一理由是:我们希望在其中嵌套另一个迭代或者一个开关。这是由于break和continue关键字通常只中断当前循环,但若随同标签一起使用,他们就会中断循环,知道标签所在的地方:
label1://Can't have statements here
outer-iteration {
inner-iteration {
//...
break;//(1)
//...
continue;//(2)
//...
continue label1;//(3)
//...
break label1;(4)
}
}
- 在(1)中,break中断内部迭代,回到外部迭代;
- 在(2)中,continue使执行点移回内部迭代的起始处;
- 在(3)中,continue label1同时中断内部迭代和外部迭代,直接转到label1处;随后,他实际上是继续迭代过程,但却从外部迭代开始;
- 在(4)中,break label1也会中断所有迭代,并回到label1处,但并不重新进入迭代,也就是说,它实际是完全终止了两个迭代。
例子:
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 < 2; k++) {
if(k == 1) {
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
来源:https://www.cnblogs.com/langlangbaobao/p/10431930.html