java不得不说的秘密-Java中goto跳转执行代码的秘密
总所周知,Java中goto属于保留字,但是你不能说Java没有goto功能的实现。
提出一个问题:当有三层循环的时候,在第三层循环满足某些条件怎么跳出所有循环或者继续开始第一层循环呢?
事实胜于雄辩
上代码,你觉得下面 代码正确吗?
public class Test {
public static void main(String[] args) {
lable:for(int i=0;i<3;i++) {
for (int j=0; j < 3; j++) {
for(int k=0;k<3;k++) {
if (k == 1) {
break lable;
}
System.out.println("i=" + i + ",j=" + j+",k="+k);
}
}
}
}
}
来看输出结果:
在进行第三层循环的时候,k=1的时候,整个三层循环全部退出了,也许你发现了其中的差一点,我们稍后再说。
继续上菜,不对上代码
public class Test {
public static void main(String[] args) {
lable:for(int i=0;i<3;i++) {
for (int j=0; j < 3; j++) {
for(int k=0;k<3;k++) {
if (k == 1) {
continue lable;
}
System.out.println("i=" + i + ",j=" + j+",k="+k);
}
}
}
}
}
有过第一个代码片段的经验,我想你不会再想着会报错吧。
来看输出结果:
不要感到吃惊,这不就是Java的goto!不过没有C语言那么强,不过也能实现跳转,在一些场景中还是一个不小的利器。
在最基本的Java语法中,break和continue只能默认对最近的循环起到作用。
但是,配合上lable标签,即代码中第一层循环前面的lable这个字段,就是lable标签,具体标签起什么名字可以自己决定。
使用很简单,让break或continue针对某一个指定的循环起作用,那么使用label标签添加在这个循环前面,然后使用break或continue加上循环定义的label标签。
注意,lable标签和循环之间不能再有其他代码。
是不是由get到了?(^_-)