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

如果您有这样的程序:

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

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

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

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

因此它编译得恰当。

正如本回答中所述,此代码编译是因为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会显示一些警告,其代码如下所示。

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

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

接着:

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

正在编译。