1

我正在用 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)但无论如何我可以跳转到它吗?

4

3 回答 3

3

任何语句都可以被标记,但它们只能与breakorcontinue一起使用:

与 C 和 C++ 不同,Java 编程语言没有 goto 语句;标识符语句标签与出现在标记语句中的任何位置的 break (§14.15) 或 continue (§14.16) 语句一起使用。

换句话说,为了可用,标签需要应用于包含 break 或 continue 的语句,而后者又可以是循环或 for breakonly 任何块。

于 2013-02-25T19:20:59.720 回答
2

不,没有办法跳回l1并继续执行。正如你所说,goto是一个未使用的关键字。标签仅用于将循环标记为break/ continue

如果您真的想“跳”到它,可以通过其他编程技术(例如递归)来做到这一点。

即,如果你想跳回l1而不是仅仅打破l2......

public void myMethod() {
    b = x > 1;

    while (b) {
        // some code
        myMethod();
    }
}

请务必添加您的退货条件。

于 2013-02-25T19:18:11.310 回答
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;
       }
  }
于 2013-02-25T20:00:55.023 回答