Как main
нельзя использовать в качестве идентификатора, в то время как он используется в качестве идентификатора для объявления "основного" метода?
Для такой классической идиомы:
public class Foo{
public static void main(String[] args){
}
}
main
не является ключевым словом и, вероятно, никогда не будет ключевым словом в Java по очевидным причинам ретро-совместимости.
По поводу вопроса, является ли main
хорошим идентификатором?
Во-первых: допустимо для компилятора не обязательно означает хороший.
Например, предложенная опция java1234
также является допустимым идентификатором, но этого действительно следует избегать.
main
имеет очень конкретное и важное значение: он используется как метод точки входа классов и jar-файлов, выполняемых командной строкой java
.
Использование main
для имени метода, котороене заполнение критериев, которые будут использоваться командной строкой java
, будет просто вводить в заблуждение, если использование его в качестве имени переменной или имени класса может иметь смысл.
Например, определение класса, представляющего точку входа приложения каккласс приложения Main
является приемлемым, поэтому его можно использовать в качестве имени переменной, например:
public class Main {
public static void main(String args[]){
Main main = new Main();
// ...
}
}
Обычно в Java несколько символов или «слов» считаются допустимыми идентификаторами длякомпилятор, но настоятельно не рекомендуется использовать его в клиентском коде (но сгенерированный код может сделать это: например, вложенные классы), поскольку он не читается и / или действительно вводит в заблуждение.
Например, это может быть допустимо для компилятора:
public class Object { // 1
public void foo() {
...
}
}
public class BadChosenIdentifier {
public static void main() { // 2
new BadChosenIdentifier().toString(new Object());
}
public void toString(Object java1234) { // 3, 4
String _result$ = java1234 + " -> to avoid"; // 4
System.out.println(_result$);
}
}
Но мы не хотим:
- назвать
Object
наш класс как этотопределяется в java.lang
(1). - , чтобы назвать метод
main()
, если он не соответствует критериям, которые будут использоваться командной строкой java
(2). - для перегрузки метода
Object.toString()
(3). - для именования наших переменных с помощью
_
, $
или любых неожиданных / не значащих символов, которые противоречат соглашениям о совместном именовании (4).