我正在浏览所以用Java查看问题,我遇到了一些有趣的代码。 请考虑以下代码:
class A {
public static void main(String[] args) {
int n = 13;
found: {
for (int x : new int[]{2,3,4,5,6,7,8,9,10,11,12})
if (n % x == 0) {
System.out.println("" + n + " equals " + x + "*" + (n/x));
break found;
}
System.out.println("" + n + " is a prime number");
}
}
}
请记住,我不是Java的老手,也不是专业程序员(所以请指出我明显缺少的任何东西)。现在,我很好奇这条线的含义:
found: {
我的第一个观察是它设定了一个变量,但经过进一步检查,我意识到我显然不是。那它在做什么? Java中有这个名字吗?
答案 0 :(得分:2)
答案 1 :(得分:2)
这是一个标签声明。 JLS-14.7. Labeled Statements说(部分)
语句可能包含标签前缀。
LabeledStatement: Identifier : Statement LabeledStatementNoShortIf: Identifier : StatementNoShortIf
Identifier
被声明为立即包含的Statement的标签。与C和C ++不同,Java编程语言没有
goto
语句;标识符语句标签与标记语句中出现的break
(§14.15)或continue
(§14.16)语句一起使用。
它通常用于嵌套循环,从内循环到break
。
out: for (int i = 0; i < 100; i++) {
for (int j = 0; j < 100; j++) {
if (j == 1) {
break out;
}
}
}
答案 2 :(得分:1)
它就像一个GOTO,这里有一些例子:
for (int i = 0; i < 10; i++) {
System.out.println(i);
if(i == 5)
break;
}
打印:
0
1
2
3
4
5
然后
badGoto:
for (int i = 0; i < 10; i++) {
System.out.println(i);
for (int j = 0; j < 2; j++) {
System.out.println(j+"j");
if(i == 1)
break badGoto;
}
}
打印:
0
0j
1j
1
0j
答案 3 :(得分:1)
found
部分称为标签。你看到有声明吗
break found;
后面的代码?这是您使用标签的地方。 found
标记了for循环。下次,当你想说for循环时,请说found
。因此,break
语句意味着:突破for循环。
你说,&#34;为什么我不能写break;
?&#34;。有时我们使用嵌套循环。在这些情况下,标签很重要。如果你想从内循环中打破外循环,你就不能写一个简单的break;
。因为它只会破坏内环而不会破坏外环。当外循环的迭代结束时,内循环将再次执行。您可以向外部循环添加标签,可以将其称为outer
,并从内部循环中写入break outer;
。
但我从来没有写过任何使用它的代码。我永远不会用标签终止我的循环。所以可能会有很多程序员不了解这个功能!