Почему 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
, написанный между двумя выходными операторами.
Почему программа компилируется без каких-либо ошибок?
Ответы
Ответ 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();
компилируется.