为什么Java中的HTTP URL会编译?

时间:2016-01-03 12:21:04

标签: java

如果你有这样的程序:

public class ABC
{
    public static void main(String args[])
    {
        System.out.println("1");
        http://example.com
        System.out.println("2");
    }
}

请注意在两个输出语句之间写入的URL http://example.com

为什么程序编译没有任何错误?

3 个答案:

答案 0 :(得分:36)

程序无错误编译的原因是程序将http:视为标签,这在Java中是允许的,并且主要用于循环。
由于//example.com,第二部分即//是注释,因此被编译器忽略。

因此它可以正确编译。

答案 1 :(得分:18)

正如this回答中所述,此代码编译是因为Java编译器认为http:是标签,而//之后的所有内容都是注释。

此外,这不会编译:

System.out.println("1");
http://example.com
int i = 1;

这不会:

System.out.println("1");
http://example.com
Date date = new Date();

但这会:

System.out.println("1");
int i;
http://example.com
i = 1;

这将:

int i = 0;
System.out.println("1");
http://example.com
i = i + 1;

而且:

int i = 0;
System.out.println("1");
http://example.com
i++;

因此,您无法在标签后声明变量。 此外,Intellij IDEA还会显示一些类似警告的警告。

答案 2 :(得分:1)

看起来编译器只接受标签后的语句。因此不允许保留关键字和类名。但是这个规则有一个例外。

interface PrintSome {
    default void print() {
        System.out.println("I`m printing some!");
    }
}

然后:

http://www.example.com
new PrintSome(){}.print();

正在编译。