Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java代码中使用标签?_Java_Label - Fatal编程技术网

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

如何在java代码中使用标签?,java,label,Java,Label,在java代码的标签中使用break语句时出错。这将显示未定义的标签。这样写代码是错误的。请帮助我正确使用它。提前谢谢 while (true) { label149: if (!localIterator2.hasNext()); while (true) { i++; break; HashMap localHash

在java代码的标签中使用break语句时出错。这将显示
未定义的标签
。这样写代码是错误的。请帮助我正确使用它。提前谢谢

 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和continue,您可以在应用程序中有复杂循环的地方使用label。但是避免使用标签总是明智的,因为它变得很难阅读代码,并且完全类似于一个糟糕的设计(还记得其他语言中的goto(仍然是java中的一个关键字)吗?)。标签的示例如下所示:

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

这意味着我需要打破我标记为abc的循环。所以它将从外部for循环中出来。如果我省略了abc,那么它将来自最内部的循环,也就是我说要从中中断的第二个循环。您不能期望标签位于代码中的任何位置。

带有标签的
中断
转到
语句不同。Java没有
goto
语句

标签标记其后面的语句。你可以用它来打破那句话,而且只能打破那句话。流的控制将始终转移到标记语句的末尾

你这里有什么

label149:if(!localIterator2.hasNext());
由于if后面有分号,这实际上是整个带标签的语句。因此,您的
中断标签149
根本不在其范围内。如果没有分号,
If
块将包括
while
,然后
中断标签149
将起作用。但是控制权将在
while
块结束后转移到该行

label246:((HashMap)已保存。this.keynamedata.get(i)).put(“已支付”、“0”);

这是label246标记的语句。同样地,
break label246
不在它的内部,因此它不在它的范围内,您不能从不在它内部的语句中中断。

标签break语句终止当前循环并继续执行第一个语句 它跟随由关键字break后面的标识符标记的循环

例如:


for(inti=0;iUhm,你在第一个if之后有一个额外的分号…基本上,它们不是很可怕,很可怕,很可怕的编程方式,是一个非常糟糕的指示符号吗design@fge-谢谢你:)但是删除它会得到另一个错误,我非常不同意。标签是限制变量范围的一种很好的方法,它是重构他人懒散编码的垫脚石。变量的作用域越受限制,代码就越容易理解。。。只是它什么也没用。
     for (int i=0; i<3; i++)
            {
             resume:
                for (……………)
                          {
                                 ……..
                              if (……..) break resume;
                 }
    }