¿Cómo mainno podría usarse como identificador mientras se usa como identificador para declarar el método "principal"?
Para un idioma tan clásico:
public class Foo{
public static void main(String[] args){
}
}
main no es una palabra clave y probablemente nunca sería una palabra clave en Java por obvias razones de compatibilidad retro.
Sobre la pregunta, ¿es mainun buen identificador?
Primero: válido para un compilador no significa necesariamente bueno.
Por ejemplo, la java1234opción que se propone también es un identificador válido, pero eso realmente debería evitarse.
maintiene un significado muy particular e importante: se utiliza como método de punto de entrada de clases y jarras ejecutadas por la javalínea de comando.
Usar mainun nombre de método que no cumpla con los criterios que usará la javalínea de comando sería engañoso mientras lo usa como nombre de variable o un nombre de clase podría tener sentido.
Por ejemplo, definir la clase que representa el punto de entrada de una aplicación como la Mainclase de la aplicación es aceptable y usarla también como nombre de variable, como por ejemplo:
public class Main {
public static void main(String args[]){
Main main = new Main();
// ...
}
}
De manera general, en Java, varios caracteres o "palabras" se consideran identificadores válidos para el compilador, pero se desaconseja su uso en el código del cliente (pero el código generado puede hacer eso: clases anidadas, por ejemplo) como no legibles y / o realmente engañoso.
Por ejemplo, esto podría ser válido para el 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$);
}
}
Pero no queremos:
- nombrar
Objectnuestra clase como se define enjava.lang (1).
- para nombrar un método
main()si no cumple los criterios que utilizará eljava línea de comando (2).
- sobrecargar el
Object.toString() método (3).
- para nombrar nuestras variables con
_, $o cualquier personaje sorprendente / poco significativo que vaya en contra de las convenciones de nomenclatura compartidas (4).