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

Par*_*ram 4 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");
          }
Run Code Online (Sandbox Code Playgroud)

SMA*_*SMA 6

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

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

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


Rea*_*tic 6

break带标签的A 与goto声明不同.Java没有goto声明.

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

那么你在这里有什么?

        label149: if (!localIterator2.hasNext());
Run Code Online (Sandbox Code Playgroud)

由于if之后的分号,这实际上是整个标记语句.所以你break label149的范围根本不在其中.如果你没有那个分号,那么该if块将包括while,然后break label149它将工作.但是在while块结束后,控制权将转移到该行.

       label246: ((HashMap)Saved.this.keynamedata.get(i)).put("is_paid", "0");
Run Code Online (Sandbox Code Playgroud)

这是label246标记的声明.同样,break label246它不在其中,所以它不在其范围内,并且你不能打破你不在其中的声明.