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

dry*_*hip 22 java

如果您有这样的程序:

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

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

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

dry*_*hip 36

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

因此它编译得恰当.

  • 但这仍然是一些声誉特技 (11认同)
  • 当你提出一个问题时,你可能已经看到了以下内容:`回答你自己的问题 - 分享你的知识,Q&A风格`.我勾选了它,然后做了. (7认同)
  • @Flocke这是我的第一个问题.你正在谈论的另一个问题在评论中得到答案.这给了我答案.但是用户没有把它转换成答案.大约几天前,我正在审查我的个人资料,当我建议我应该开始对这个问题给予赏金.但我得到了答案,所以我写了这个答案,以便将来可能会搜索它. (6认同)
  • 应该提到还是一个糟糕的形式. (4认同)
  • 允许这样做"我问一个问题并立即回答"吗?oOÄhm.. OP在本网站的几个问题中做到了这一点...... (4认同)
  • @Angew值得一提的是它受到鼓励,但它应该**不要**鼓励你创建重复... (3认同)
  • @ aliasm2k它可能对你有用,但它是[**明确鼓励**](http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ )在堆栈网络上. (2认同)
  • @Flocke不仅允许,甚至[鼓励](http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/). (2认同)

coo*_*guy 18

正如回答所述,此代码编译,因为Java编译器认为这http:是一个标签,后面的所有内容//都是注释.

另外,这不会编译:

System.out.println("1");
http://example.com
int i = 1;
Run Code Online (Sandbox Code Playgroud)

这不会:

System.out.println("1");
http://example.com
Date date = new Date();
Run Code Online (Sandbox Code Playgroud)

但这会:

System.out.println("1");
int i;
http://example.com
i = 1;
Run Code Online (Sandbox Code Playgroud)

这将:

int i = 0;
System.out.println("1");
http://example.com
i = i + 1;
Run Code Online (Sandbox Code Playgroud)

还有这个:

int i = 0;
System.out.println("1");
http://example.com
i++;
Run Code Online (Sandbox Code Playgroud)

所以你不能在标签后声明变量.此外,Intellij IDEA会显示一些警告,其代码如下所示.