6

所以我看到很多情况下,标签被用在 for 循环中,特别是在双重嵌套循环中。

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

4

2 回答 2

7

公平地说,标记循环是使用标记语句的唯一有用方式。

可以在 Java 中标记任何语句,但使用它们的唯一方法是作为(标记的)breakcontinue语句的目标。

但通常的建议仍然适用:仅仅因为您可以做某事并不意味着您应该做某事。不要将标签用作有趣的“评论”(是的,我已经看到这样做了)。不要仅仅为了炫耀你打破或继续外循环的能力而编写双重嵌套循环。如今,我们倾向于支持适用于整个序列的操作,从而减少标记breaks 和continues 的某些用途。与往常一样,以可读性和简单性为目标。也就是说,输出Java 源代码的解析器生成器之类的工具很可能会大量使用标记语句,即使人类程序员很少这样做。

于 2013-05-15T01:46:00.290 回答
5

带标签的 break 和 continue本质上是 goto 语句。

https://stackoverflow.com/a/6373262/895245:转发转到:

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 语句何时合法的永无止境的辩论,例如:C 或 C++ 中好的 goto 示例,另外一个事实是,上面的反向 goto 习语甚至比直接 GOTO 更难看。

于 2015-04-06T11:32:11.953 回答