Подтвердить что ты не робот

Почему URL-адрес HTTP в Java компилируется?

Если у вас есть такая программа:

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

Обратите внимание на URL http://example.com, написанный между двумя выходными операторами.

Почему программа компилируется без каких-либо ошибок?

4b9b3361

Ответ 1

Причина, по которой программа компилируется без ошибок, заключается в том, что программа рассматривает http: как метку, которая разрешена в Java, и в основном используется с циклами.
Вторая часть, т.е. //example.com, является комментарием из-за // и поэтому игнорируется компилятором.

Следовательно, он правильно компилируется.

Ответ 2

Как он описан в 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 показывает некоторые предупреждения с таким кодом.

Ответ 3

Похоже, что компилятор принимает только инструкции после ярлыков. Таким образом, зарезервированные ключевые слова и имена классов не допускаются. Но есть исключение из этого правила.

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

а затем:

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

компилируется.