java - Java 中的未知代码

标签 java class for-loop methods iterator

<分区>

我正在浏览 SO 以查看 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 中有这个名称吗?

最佳答案

这是一个带标签的声明。 JLS-14.7. Labeled Statements说(部分)

Statements may have label prefixes.

 LabeledStatement:
     Identifier : Statement

 LabeledStatementNoShortIf:
     Identifier : StatementNoShortIf

The Identifier is declared to be the label of the immediately contained Statement.

Unlike C and C++, the Java programming language has no goto statement; identifier statement labels are used with break (§14.15) or continue (§14.16) statements appearing anywhere within the labeled statement.

它通常与嵌套循环一起使用,以从内部循环中中断

out: for (int i = 0; i < 100; i++) {
    for (int j = 0; j < 100; j++) {
        if (j == 1) {
            break out;
        }
    }
}

关于java - Java 中的未知代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32792441/

相关文章:

java - 如何确定时间复杂度是 O(m + n) 还是 O(Math.max(m, n))

C++ template double std::complex<double> 范数和积

c++ - 派生类函数

c# - 在 XNA 中依次显示列表中的名称

java - Spring Batch和Spring Integration的集成问题-“未为端点定义轮询器”异常

java - 以秒为单位计时某件事需要多长时间

java - 如何强制 Jackson 在 Controller 中调用对象(dto)中所有属性的 Set 方法?

php - 你能帮助我更好地理解 PHP 类吗?

java - 查找二维数组的主要和次要对角线是否由 0 组成

Java 迭代固定长度的数组并使用 Scanner 类获取值