尽管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