为什么Java允许标签远离循环?

时间:2013-02-25 19:14:46

标签: java loops syntax goto

我在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)但是我还能跳到它吗?

3 个答案:

答案 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;
       }
  }