关于Java中的标签表现得像GOTO

时间:2014-07-03 02:19:13

标签: java goto

不应该无限循环吗?

someLabel:{
        for (int i = 0; i < 5; ++i) {
            System.out.println(i);
            if (i == 3)
                break someLabel;
        }
}

它是

0
1
2
3

然后死了。我正在阅读有关Java中GOTO替代品的问题。这是公认的答案:https://stackoverflow.com/a/2430789/555690。难道不能再次执行for循环吗?

2 个答案:

答案 0 :(得分:1)

来自http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html

  

break语句终止带标签的语句;它不会将控制流转移到标签上。控制流程在标记(终止)语句之后立即转移到语句。

除了我从未看到使用这种控制流的任何真实代码这一事实,我想它的用途是从内部循环中破坏外部循环(如提供的链接中所述):

search:
    for (i = 0; i < arrayOfInts.length; i++) {
        for (j = 0; j < arrayOfInts[i].length;
             j++) {
            if (arrayOfInts[i][j] == searchfor) {
                foundIt = true;
                break search;
            }
        }
    }

答案 1 :(得分:0)

Java language specification

  

带有标签标识符break声明会尝试转移控件   封闭的带标签的声明(§14.7)具有相同的声明   标识符作为其标签; 这句话,称为休息   目标,然后立即正常完成。

这里的陈述实际上是一个块语句。一旦break,该块结束。

所以,不,for循环不应再次迭代,因为它位于刚刚结束的块内。