在java中使用冒号运算符(例如:Test :)的文本有什么用处

Nar*_*edi 7 java syntax

在其中一个论坛中,我发现下面的代码是一个问题:

public class Test{
    public static void main(String[] args){
        System.out.println("Hello");
        Test:
        System.out.println("World");
    }
}
Run Code Online (Sandbox Code Playgroud)

并询问结果会是什么?

我认为这将是一个编译时错误,因为我还没有看到Test:java中的代码.我错了,令人惊讶的是,在编译和运行代码之后打印了两行.

任何人都可以告诉我这种Test:代码的用途是什么?为什么不抛错误?

Mur*_*nik 8

后跟冒号(:)的文本称为标签.它可以在控制结构(例如循环)的上下文中使用break到或continue在.在这种情况下,尽管完全合法,但它毫无意义.


Edd*_*Edd 5

Test:文本是一个标签,在语言规范中进行描述,用于breakcontinue来自内部循环,如以下示例所示:

与C和C++不同,Java编程语言没有goto语句; 标识符语句标签与出现在标记语句中任何位置的break或continue语句(第14.15节,第14.16节)一起使用.

public static void main(String[] args) {
    outerLoop:
    while (true) {
        int i = 0;
        while (true) {
            System.out.println(i++);
            if (i > 5) {
                break outerLoop;
            }
            if (i > 10) {
                break;
            }
        }
        System.out.println("Broken inner loop");
    }
    System.out.println("Broken outer loop");
}
Run Code Online (Sandbox Code Playgroud)