所以我看到很多情况下,标签被用在 for 循环中,特别是在双重嵌套循环中。
这是唯一可以使用它们的情况吗?或者还有其他我不知道的常见用途。我觉得它是一个我从未使用过的 java 工具!
公平地说,标记循环是使用标记语句的唯一有用方式。
您可以在 Java 中标记任何语句,但使用它们的唯一方法是作为(标记的)break
或continue
语句的目标。
但通常的建议仍然适用:仅仅因为您可以做某事并不意味着您应该做某事。不要将标签用作有趣的“评论”(是的,我已经看到这样做了)。不要仅仅为了炫耀你打破或继续外循环的能力而编写双重嵌套循环。如今,我们倾向于支持适用于整个序列的操作,从而减少标记break
s 和continue
s 的某些用途。与往常一样,以可读性和简单性为目标。也就是说,输出Java 源代码的解析器生成器之类的工具很可能会大量使用标记语句,即使人类程序员很少这样做。
带标签的 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 更难看。