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

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

带标签的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不在其中,因此它不在其范围内,并且你不能打破你不在其中的声明。

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

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

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

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

例如:

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