Como main
não pôde ser usado como identificador enquanto é usado como identificador para declarar o método "principal"?
Para um idioma tão clássico:
public class Foo{
public static void main(String[] args){
}
}
main
não é uma palavra-chave e provavelmente nunca seria uma palavra-chave em Java por razões óbvias de compatibilidade retroativa.
Sobre a pergunta, é main
um bom identificador?
Primeiro: válido para um compilador não significa necessariamente bom.
Por exemplo, a java1234
opção proposta também é um identificador válido, mas que realmente deve ser evitado.
main
tem um significado muito particular e importante: é usado como o método de ponto de entrada de classes e jarros executados pela java
linha de comando.
Usar main
um nome de método que não preencha os critérios a serem usados pela java
linha de comando seria enganoso, mas usá-lo como nome de variável ou nome de classe pode fazer sentido.
Por exemplo, definir a classe que representa o ponto de entrada de um aplicativo como a Main
classe do aplicativo é aceitável e, portanto, usá-lo também como nome de variável, como:
public class Main {
public static void main(String args[]){
Main main = new Main();
// ...
}
}
De maneira geral, em Java, vários caracteres ou "palavras" são considerados identificadores válidos para o compilador, mas são fortemente desencorajados a serem usados no código do cliente (mas o código gerado pode fazer isso: classes aninhadas por exemplo) como não legíveis e / ou realmente enganoso.
Por exemplo, isso pode ser válido para o compilador:
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$);
}
}
Mas nós não queremos:
- para nomear
Object
nossa classe, conforme definido em java.lang
(1).
- nomear um método
main()
se não preencher os critérios a serem usados pela java
linha de comando (2).
- sobrecarregar o
Object.toString()
método (3).
- para citar nossos variáveis com
_
, $
ou quaisquer caracteres surpreendentes / unmeaningful que vão contra as convenções de nomenclatura comum (4).