如何在 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 那么它就会从最里面的循环中出来,即我说它要中断的第二个循环。您不能指望标签出现在代码中的任何位置。
带有标签的 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
不在它里面,所以它不在它的范围内,你不能跳出一个你不在其中的语句。
label break 语句终止当前循环并继续执行第一条语句
在由关键字 break 之后的标识符标记的循环之后。
例如:
for (int i=0; i<3; i++)
{
resume:
for (……………)
{
……..
if (……..) break resume;
}
}
java中的lable与c语言中的goto不一样
在程序流程中,它们必须首先包含标签 246: ,然后才允许使用 break 或 continue 语句。
我在 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 那么它就会从最里面的循环中出来,即我说它要中断的第二个循环。您不能指望标签出现在代码中的任何位置。
带有标签的 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
不在它里面,所以它不在它的范围内,你不能跳出一个你不在其中的语句。
label break 语句终止当前循环并继续执行第一条语句 在由关键字 break 之后的标识符标记的循环之后。
例如:
for (int i=0; i<3; i++)
{
resume:
for (……………)
{
……..
if (……..) break resume;
}
}
java中的lable与c语言中的goto不一样
在程序流程中,它们必须首先包含标签 246: ,然后才允许使用 break 或 continue 语句。