我正在用 JAVA 编码,突然我写了一些这样的代码:
int x = 10;
boolean b = true;
l1: b = x > 1;
l2: while (b) {
// some code
break l2;
}
令我惊讶的是,代码编译并正常运行。我没有对我的l1
标签做任何事情,但为什么它可以正确编译这个语句?
我知道goto
在 java EXISTS 但未使用(Java Language Keywords)但无论如何我可以跳转到它吗?
我正在用 JAVA 编码,突然我写了一些这样的代码:
int x = 10;
boolean b = true;
l1: b = x > 1;
l2: while (b) {
// some code
break l2;
}
令我惊讶的是,代码编译并正常运行。我没有对我的l1
标签做任何事情,但为什么它可以正确编译这个语句?
我知道goto
在 java EXISTS 但未使用(Java Language Keywords)但无论如何我可以跳转到它吗?
任何语句都可以被标记,但它们只能与break
orcontinue
一起使用:
与 C 和 C++ 不同,Java 编程语言没有 goto 语句;标识符语句标签与出现在标记语句中的任何位置的 break (§14.15) 或 continue (§14.16) 语句一起使用。
换句话说,为了可用,标签需要应用于包含 break 或 continue 的语句,而后者又可以是循环或 for break
only 任何块。
不,没有办法跳回l1
并继续执行。正如你所说,goto
是一个未使用的关键字。标签仅用于将循环标记为break
/ continue
。
如果您真的想“跳”到它,可以通过其他编程技术(例如递归)来做到这一点。
即,如果你想跳回l1
而不是仅仅打破l2
......
public void myMethod() {
b = x > 1;
while (b) {
// some code
myMethod();
}
}
请务必添加您的退货条件。
如果你想摆脱许多循环,你可以使用带标签的 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;
}
}