请解释一下Labeled statements的用法
- Java 中标记语句的唯一用途是中断和继续吗?
- 您什么时候在程序中使用过标签语句?
抱歉,代码片段已被删除。我正在拆分问题
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
抱歉,代码片段已被删除。我正在拆分问题
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
JLS 14.7 标记语句
(为了清晰起见进行了编辑)
因此,JLS 很清楚,标签与
break
或continue
一起使用,并且 Java 编程语言的其他语法元素都没有使用它。严格来说,
break
和Continue
,无论是否标记,都永远是必要的。它们总是可以从代码中写出来。然而,按照惯用方式使用它们可以产生更具可读性的代码。下面是一个说明性示例:给定一个
int[]
,我们希望:"One (1)"
on1
"
在2
上的两 (2)"0
上打印“零”
立即停止对任何其他数字的处理
我们可以看到:
switch
中处理switch
switch 中未标记
用于避免 case 之间的“失败”break
Continue Loop;
用于跳过case 0:
的后处理(该标签不是必需的)此处)break loop;
用于终止default:
上的循环(此处标签是;否则它是一个switch break
)因此标记为
break
/continue
也可以在嵌套循环之外使用;当switch
嵌套在循环内时可以使用它。更一般而言,当可能存在多个break
/continue
目标,并且您想要选择一个不立即包含break
/ 的目标时,会使用它继续
语句。这是另一个例子:
这是另一种情况,标记的
break
不是在迭代语句中使用,而是在简单的块语句中使用。有人可能会争辩说,标签可以提高可读性。这一点是主观的。不,最后一行不会给出编译时错误。它实际上是受到 Java Puzzlers Puzzle 22:Dupe of URL 的启发。不幸的是,这个难题并没有更深入地“正确”使用标记语句。
JLS 14.7 Labeled statements
(edited for clarity)
So the JLS is clear that labels are used with
break
orcontinue
, and no other grammatical element of the Java programming language uses it.Strictly speaking,
break
andcontinue
, labeled or not, are NEVER necessary. They can always be written out of the code. Used idiomatically, however, they can lead to more readable code.Here's an illustrative example: given an
int[]
, we want to :"One (1)"
on1
"Two (2)"
on2
"Zero "
on0
immediately stop processing on any other number
Here we see that:
switch
break
in theswitch
is used to avoid "fall-through" between casescontinue loop;
is used to skip post-processing oncase 0:
(the label is not necessary here)break loop;
is used to terminate the loop ondefault:
(the label is necessary here; otherwise it's aswitch break
)So labeled
break
/continue
can also be used outside of nested loops; it can be used when aswitch
is nested inside a loop. More generally, it's used when there are potentially multiplebreak
/continue
target, and you want to choose one that is not immediately enclosing thebreak
/continue
statement.Here's another example:
Here's another case of a labeled
break
being used not within an iterative statement, but rather within a simple block statement. One may argue that the labels lead to better readability; this point is subjective.And no, the last line DOES NOT give compile time error. It's actually inspired by Java Puzzlers Puzzle 22: Dupe of URL. Unfortunately, the puzzle does not go into "proper" use of labeled statements in more depth.
是的,
break
和continue
是 Java 中标记语句的唯一两种用途。 (Java 没有goto
语句。)您可以使用标签来打破嵌套循环。
当您
继续
回到outer
标签时,您将跳过内部循环和外部循环的其余部分,包括 print 语句。Yes,
break
andcontinue
are the only two uses for labeled statements in Java. (Java has nogoto
statement.)You can use a label to break out of nested loops.
When you
continue
back to theouter
label, you're skipping the remainder of both the inner and the outer loop, including the print statement.