Jak mainnie można go użyć jako identyfikatora, gdy jest używany jako identyfikator do deklarowania metody „głównej”?
Dla takiego klasycznego idiomu:
public class Foo{
public static void main(String[] args){
}
}
main nie jest słowem kluczowym i prawdopodobnie nigdy nie będzie słowem kluczowym w Javie z oczywistych powodów kompatybilności retro.
Jeśli chodzi o pytanie, czy jest mainto dobry identyfikator?
Po pierwsze: poprawne dla kompilatora niekoniecznie musi oznaczać dobre.
Na przykładjava1234 proponowana opcja jest również prawidłowym identyfikatorem, ale tak naprawdę należy jej unikać.
mainma bardzo szczególne i ważne znaczenie: jest stosowany jako metoda wejścia klas i słoików wykonywanych przez javawiersz poleceń.
Użycie mainnazwy metody, która nie spełnia kryteriów używanych w javawierszu poleceń, byłoby po prostu mylące, gdy używałaby jej jako nazwy zmiennej lub nazwy klasy może mieć sens.
Na przykład zdefiniowanie klasy reprezentującej punkt wejścia aplikacji jako Mainklasy aplikacji jest dopuszczalne, dlatego też użycie jej jako nazwy zmiennej, takiej jak:
public class Main {
public static void main(String args[]){
Main main = new Main();
// ...
}
}
Ogólnie rzecz biorąc, w Javie wiele znaków lub „słów” jest uważanych za prawidłowe identyfikatory kompilatora, ale zdecydowanie odradza się ich stosowanie w kodzie klienta (ale generowany kod może to zrobić: na przykład klasy zagnieżdżone) jako nieczytelne i / lub naprawdę wprowadzające w błąd.
Na przykład może to być poprawne dla kompilatora:
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$);
}
}
Ale nie chcemy:
- nazwać
Objectnaszą klasę zgodnie z definicją w java.lang(1).
- nazwać metodę,
main()jeśli nie spełnia kryteriów, które mają być użyte w javalinii poleceń (2).
- przeładować
Object.toString()metodę (3).
- aby wymienić nasze zmienne z
_, $ani żadnych zaskakujących / unmeaningful znaki, które wykraczają przeciwko współdzielonych konwencji nazewnictwa (4).