java标签可以在for循环之外适当地使用吗?

java标签可以在for循环之外适当地使用吗?,java,for-loop,label,Java,For Loop,Label,所以我已经看到了很多例子,其中标签被用于循环,特别是双嵌套循环 这是唯一可以使用它们的情况吗?或者还有其他我不知道的常见用途。我觉得这是一个我从未使用过的java工具 可以公平地说,标记循环是使用标记语句的唯一有效方法 您可以在Java中标记任何语句,但使用它们的唯一方式是作为(标记的)break或continue语句的目标 不过,通常的建议是适用的:仅仅因为你能做某事并不意味着你应该做。不要把标签当作有趣的“评论”(是的,我已经看过了)。不要编写双重嵌套循环只是为了炫耀您打破或继续外部循环的能

所以我已经看到了很多例子,其中标签被用于循环,特别是双嵌套循环


这是唯一可以使用它们的情况吗?或者还有其他我不知道的常见用途。我觉得这是一个我从未使用过的java工具

可以公平地说,标记循环是使用标记语句的唯一有效方法

您可以在Java中标记任何语句,但使用它们的唯一方式是作为(标记的)
break
continue
语句的目标


不过,通常的建议是适用的:仅仅因为你能做某事并不意味着你应该做。不要把标签当作有趣的“评论”(是的,我已经看过了)。不要编写双重嵌套循环只是为了炫耀您打破或继续外部循环的能力。现在,我们倾向于支持应用于整个序列的操作,减少了标记的
break
s和
continue
s的一些使用。一如既往,力求可读性和简洁性。这就是说,像输出Java源代码的解析器生成器这样的工具很可能大量使用带标签的语句,即使人类程序员很少这样做。

带标签的break and continue本质上就是goto语句

发件人:转发转到:

label: {
  // do stuff
  if (check) break label;
  // do more stuff
}
向后转到

label: do {
  // do stuff
  if (check) continue label;
  // do more stuff
  break label;
} while(true);

因此,这个问题归结为关于goto语句何时合法的永无休止的争论,例如:,再加上上面的向后goto习惯用法甚至比直接goto更丑陋。

由于编程语言滥用
goto
语句的历史,它的使用非常少,这可能导致“意大利面”代码,难以遵循且无法调试的代码。IMHO标签显示了使用它们的开发人员的糟糕设计和懒惰。应该不惜一切代价避免它们,特别是由于HFOEGoto所述的所有原因,它们在Java中是不起作用的。也许他们会在Java10中,在Dijkstra的memoriam中添加它。所以除了循环之外,它们没有用?即使这样,我也可能不应该使用?在几十年的编程过程中(在Java中使用了几年),我可以单凭一只手计算出正确使用标签的次数。在Java中,它们都与打破循环有关。即使在那时,它们也让我呻吟,我确信如果我有时间清理(删除它们),没有它们,代码会更干净(更容易调试和阅读)。它们可以在任何地方使用,但它们会使调试变得困难,而且每次使用一只小猫,你都会杀死5只小猫。;)那么它对代码生成更有用吗?我只是想知道为什么我错过了一个有用的java工具,但听起来我没有用它们做任何事情是对的!这很公平。你可以在某些情况下使用它们;经典的例子可能是Rubin的“查找包含所有零的矩阵中的第一行”。在这里,当您扫描行中的项目时,当您找到非零元素时,您将继续执行已标记的外部循环。IMHO是可接受的用途;也许有点做作,但它给了你想法。在函数式编程语言中,我们有像
every
some
map
filter
这样的高阶操作符,因此这类东西更容易编写。但在Java中,偶尔也会有一次,我觉得没关系。