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

How to use labels in java code?

我在 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");
          }

有了 Break and continue,您可以在应用程序中有复杂循环的地方使用标签。但始终建议避免使用标签,因为它变得难以阅读代码并且完全类似于糟糕的设计(还记得其他语言中的 goto(仍然是 java 中的关键字吗?)。标签示例如下:

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

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

带有标签的 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 不在它里面,所以它不在它的范围内,你不能跳出一个你不在其中的语句。

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

例如:

     for (int i=0; i<3; i++)
            {
             resume:
                for (……………)
                          {
                                 ……..
                              if (……..) break resume;
                 }
    }

java中的lable与c语言中的goto不一样

在程序流程中,它们必须首先包含标签 246: ,然后才允许使用 break 或 continue 语句。