如果你有这样的程序:
public class ABC
{
public static void main(String args[])
{
System.out.println("1");
http://example.com
System.out.println("2");
}
}
请注意在两个输出语句之间写入的URL http://example.com
。
为什么程序编译没有任何错误?
答案 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();
正在编译。