Come mainpotrebbe non essere usato come identificatore mentre è usato come identificatore per dichiarare il metodo "principale"?
Per un linguaggio così classico:
public class Foo{
public static void main(String[] args){
}
}
main non è una parola chiave e probabilmente non sarebbe mai una parola chiave in Java per ovvi motivi di retro compatibilità.
A proposito della domanda, è mainun buon identificatore?
Primo: valido per un compilatore non significa necessariamente buono.
Ad esempio, l' java1234opzione che viene proposta è anche un identificatore valido ma che dovrebbe davvero essere evitato.
mainha un significato molto particolare e importante: viene utilizzato come metodo del punto di ingresso di classi e vasetti eseguiti dalla javariga di comando.
L'uso maindi un nome di metodo che non soddisfa i criteri da utilizzare dalla javariga di comando sarebbe fuorviante mentre lo si utilizza come nome di variabile o nome di classe potrebbe avere senso.
Ad esempio, definire la classe che rappresenta il punto di ingresso di un'applicazione come Mainclasse dell'applicazione è accettabile e quindi usarlo anche come nome di variabile come:
public class Main {
public static void main(String args[]){
Main main = new Main();
// ...
}
}
In generale, in Java, più caratteri o "parole" sono considerati identificatori validi per il compilatore ma sono fortemente sconsigliati di essere utilizzati nel codice client (ma il codice generato può farlo: classi nidificate ad esempio) come non leggibili e / o davvero fuorviante.
Ad esempio, questo potrebbe essere valido per il compilatore:
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$);
}
}
Ma non vogliamo:
- nominare la
Objectnostra classe come questa è definita in java.lang(1).
- nominare un metodo
main()se non soddisfa i criteri da utilizzare dalla javariga di comando (2).
- per sovraccaricare il
Object.toString()metodo (3).
- nominare le nostre variabili con
_, $o qualsiasi carattere sorprendente / indesiderato che vada contro le convenzioni di denominazione condivise (4).