如何在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"); }
带标签的break
与goto
语句不同。 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; } }