如何在java代码中使用标签?

时间:2015-02-07 10:48:02

标签: java label

我在java代码中的标签中使用break语句时遇到错误。这显示undefined label。编写这样的代码是错误的。请帮我正确使用它。提前谢谢。

 while (true)
          {
            label149: if (!localIterator2.hasNext());
            while (true)
            {
              i++;
              break;
              HashMap localHashMap2 = (HashMap)localIterator2.next();
              if (!((String)localHashMap1.get("name")).equalsIgnoreCase((String)localHashMap2.get("emotion")))
                break label149;
              if (!((String)localHashMap2.get("IS_paid")).equalsIgnoreCase("1"))
                break label246;
              ((HashMap)Saved.this.keynamedata.get(i)).put("is_paid", "1");
            }
            label246: ((HashMap)Saved.this.keynamedata.get(i)).put("is_paid", "0");
          }

3 个答案:

答案 0 :(得分:6)

带有标签的breakgoto语句不同。 Java没有goto语句。

标签标记其后的声明。您可以使用它来突破该语句,并且只能在该语句之外。流量控制将始终转移到标签声明的末尾。

那么你在这里有什么?

        label149: if (!localIterator2.hasNext());

由于if之后的分号,这实际上是整个标签语句。所以你的break label149根本不在其范围内。如果您没有该分号,则if块将包含while,然后break label149将起作用。但是在while块结束后,控制权将转移到该行。

       label246: ((HashMap)Saved.this.keynamedata.get(i)).put("is_paid", "0");

这是label246标记的声明。同样,break label246不在其中,因此它不在其范围内,并且您不能突破您不在其中的声明。

答案 1 :(得分:3)

使用Break和continue,您可以在应用程序中使用复杂循环的标签。但总是建议避免使用标签,因为它变得难以阅读代码并且完全类似于糟糕的设计(请记住goto(在java中仍然是一个关键字)在其他语言中?)。标签的一个例子是:

abc: for (;;) {
    for (;; i++) {
        if (i == 255) {
            break abc;
        }
    }
}
System.out.println("Noww i am back");

这表示我需要打破我标记为abc的循环。所以它将来自外部循环。如果我在那里省略了abc那么它就会从最里面的循环中出来,即第二个循环,我说它要从中断开。您不能指望标签位于代码中的任何位置。

答案 2 :(得分:2)

标签break语句终止当前循环并继续执行第一条语句 紧随关键字break之后的标识符所标记的循环之后。

例如:

ld -r -o foo.o a.o b.o c.o table.o