为什么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();
正在编译。