这段Java代码为何能够编译通过?

6
一位同事看到了下面这段代码,但不明白它是如何编译通过的:
class FooClass {
  public static void bar(String arg) {
     System.out.println("arg = " + arg);
     http://www.google.com
     System.out.println("Done!");
  }
}

基本上,在一个方法中间粘贴了一个随机的URL,但是javac并不在意。

我们已经解决了这个问题,如果没有其他人找到答案,我会发布答案,但我认为这个问题足够有趣,值得发布。


顺便提一下,它也适用于C#(可能也适用于C++)。 - GalacticCowboy
3
每种协议只允许一个URL,比如只有一个"http"、一个"https"、一个"ftp"等。javac对此比较挑剔。 - Michael Myers
6个回答

20
"

http:

被解释为一个标签。紧随其后的是一个行末注释。"

2
break http; 只是一个 GOTO 语句的秘密身份,他们一直说它很邪恶,并且不会成为语言的一部分。我不知道 Java 中有标签...虽然我不想说我认为 GOTO 和标签和其他人一样邪恶... - Peter Perháč

5
你有一个标签
http:

跟着一个注释

//www.google.com

2
容易。这个网站的高亮显示说明了原因。
"http:"是一个标签,就像打断"http;"一样;
"//www.google.com"是一个注释。

2

http:是标签。 //开始注释。


2
"http:" 是一个标签,而在 "//" 之后的部分则是注释。

1

另一个例子,包含两个http://

public class Main {
    {
        http://en.wikipedia.org/wiki/Hello_world_program
        System.out.print("Hello ");
    } {
        http://java.sun.com/docs/books/tutorial/getStarted/application/index.html
        System.out.println("World!");
    }

    public static void main(String... args) {
        new Main();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接