我正忙着学习我的认证,我偶然发现了一个我以前从未听过的概念 - “标签声明”。 e.g:
'label':'声明'
L1: while(i < 0){
L2: System.out.println(i);
}
所以我的问题是......为什么?这有什么用,什么时候想用这样的东西?
答案 0 :(得分:25)
我所知道的唯一用途是您可以在break
或continue
语句中使用标签。因此,如果您有嵌套循环,那么这是一次突破多个级别的方法:
OUTER: for (x : xList) {
for (y : yList) {
// Do something, then:
if (x > y) {
// This goes to the next iteration of x, whereas a standard
// "continue" would go to the next iteration of y
continue OUTER;
}
}
}
如示例所示,如果您以嵌套方式一次迭代两件事(例如搜索匹配项)并希望继续 - 或者如果您正在进行正常迭代,但由于某种原因需要,它偶尔会有用在嵌套的for
循环中放置/继续。
答案 1 :(得分:21)
它可以用来避免需要“未找到”标志。
FOUND: {
for(Type t: list)
if (t.isTrue())
break FOUND;
// handle not found.
}
这可能是对标签的误用,但你可以使用它们在没有循环的情况下破解。
LABEL: {
if(condition)
break LABEL;
// do something
}
它也可以用来混淆人,这是避免它的一个很好的理由。 ;)
http://www.google.com
while(true) break http;
答案 2 :(得分:2)
我认为它们是必需的,因此您可以在假装编写Java时编写Fortran。没有它们,格言 Real programmers write in Fortran无论使用何种语言都可能无效。
答案 3 :(得分:2)
我曾经把它们用作评论语句:)除了笑话之外,它就像基本的Go to语句,它允许你跳转到一行代码,即在深度循环结构中......
用法:
scan: {
int c;
for (firstUpper = 0 ;
firstUpper < count ;
firstUpper += Character.charCount(c)) {
c = codePointAt(firstUpper);
if (c != Character.toLowerCase(c)) {
break scan;
}
}
return this;
}
答案 4 :(得分:2)
以下是其他回复可能错过的过度break
的示例。它允许在switch {}语句中打破一个循环:
loop: for(;;){
int c=in.read();
switch(c){
case -1:
case '\n':
break loop;
case 'a':
processACommand();
break;
case ...
default:
break;
}
}
答案 5 :(得分:0)
正如其他答案所述,标签很少被用作Java语言的一部分。
但在你的情况下,还应该考虑其他一些事情:
标签非常“通用”,实际上是行号:L1
,L2
,...
代码中未使用标签。
您正在学习认证材料。
这意味着,L1
,L2
标签只是行号。我假设,解释代码的文本是指行号。同样地,一些书籍和论文列举了所有数学术语,只是为了在文本中引用它们或使引文更容易。