Как 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).
- назвать наши переменные с
_
, $
или любыми неожиданными / unmeaningful символов , которые идут против общих соглашений об именах (4).