Jak main
nie 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 main
to 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ć.
main
ma bardzo szczególne i ważne znaczenie: jest stosowany jako metoda wejścia klas i słoików wykonywanych przez java
wiersz poleceń.
Użycie main
nazwy metody, która nie spełnia kryteriów używanych w java
wierszu 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 Main
klasy 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ć
Object
naszą 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 java
linii 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).