Java中的未知代码

时间:2015-09-26 00:36:47

标签: java class for-loop methods iterator

我正在浏览所以用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中有这个名字吗?

4 个答案:

答案 0 :(得分:2)

它是一个标签,就像过去的甜蜜GOTO声明一样。我从来没有在实践中看到过这种情况。

答案 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;

但我从来没有写过任何使用它的代码。我永远不会用标签终止我的循环。所以可能会有很多程序员不了解这个功能!