我在JAVA编码,突然我写了一些这样的代码:
int x = 10;
boolean b = true;
l1: b = x > 1;
l2: while (b) {
// some code
break l2;
}
令我惊讶的是,代码编译并正常运行。我对l1
标签一无所知,但为什么用这个语句正确编译?
我知道java EXISTS中的goto
但未使用(Java Language Keywords)但是我还能跳到它吗?
答案 0 :(得分:3)
可以标记任何语句,但they are only useful in conjunction with break
or continue
:
与C和C ++不同,Java编程语言没有goto语句;标识符语句标签与出现在标记语句中任何位置的break(§14.15)或continue(§14.16)语句一起使用。
换句话说,要使用,标签需要应用于包含中断或继续的语句,而该语句又可以是循环,或者仅适用于break
任何块。
答案 1 :(得分:2)
不,没有办法跳回l1
并继续执行。正如您所说,goto
是一个未使用的关键字。标签仅用于将循环标记为break
/ continue
。
如果你真的想“跳”到它,有很多方法可以通过其他编程技术来实现,例如递归。
即,如果您想跳回l1
而不是仅仅打破l2
......
public void myMethod() {
b = x > 1;
while (b) {
// some code
myMethod();
}
}
请务必添加退货条件。
答案 2 :(得分:0)
如果您想要退出许多循环,可以使用带标签的continue语句。解决代码的方法就是这样。
int x = 10;
boolean b = true;
l1:
for(int i=1;i>0;i--) { b = x > 1;
l2: while (b) {
// some code
//break l2;
i++;continue l1;
}
}