Main() je východiskovým bodom pre JVM na spustenie vykonávania programu Java. Bez metódy main() JVM nespustí program. Syntax metódy main() je:
verejné: Je to špecifikátor prístupu. Pred metódou main() by sme mali použiť verejné kľúčové slovo, aby JVM mohlo identifikovať bod vykonávania programu. Ak pred metódou main() použijeme private, protected a default, nebude to viditeľné pre JVM.
statický: Metódu môžete urobiť statickou pomocou kľúčového slova static. Mali by sme volať metódu main() bez vytvorenia objektu. Statické metódy sú metóda, ktorá vyvoláva bez vytvorenia objektov, takže na volanie metódy main() nepotrebujeme žiadny objekt.
neplatné: V jazyku Java má každá metóda návratový typ. Kľúčové slovo Void potvrdzuje kompilátoru, že metóda main() nevracia žiadnu hodnotu.
Hlavná(): Je to predvolený podpis, ktorý je preddefinovaný v JVM. JVM ho volá, aby spustil program riadok po riadku a ukončil vykonávanie po dokončení tejto metódy. Preťažiť môžeme aj metódu main().
Argumenty reťazca[]: Metóda main() tiež prijíma niektoré údaje od používateľa. Prijíma skupinu reťazcov, ktorá sa nazýva pole reťazcov. Používa sa na uchovávanie argumentov príkazového riadku vo forme reťazcových hodnôt.
main(String args[])
Tu je agrs[] názov poľa a je typu String. To znamená, že môže uložiť skupinu reťazcov. Pamätajte, že toto pole môže tiež uložiť skupinu čísel, ale iba vo forme reťazca. Hodnoty odovzdané do metódy main() sa nazývajú argumenty. Tieto argumenty sú uložené do poľa args[], preto sa preň všeobecne používa názov args[].
Čo sa stane, ak je metóda main() napísaná bez argumentov typu String[]?
Program sa skompiluje, ale nespustí, pretože JVM nerozpozná metódu main(). Pamätajte, že JVM vždy hľadá metódu main() s poľom typu reťazec ako parametrom.
Proces vykonávania
Najprv JVM vykoná statický blok, potom vykoná statické metódy a potom vytvorí objekt potrebný pre program. Nakoniec vykoná metódy inštancie. JVM vykonáva statický blok na základe najvyššej priority. Znamená to, že JVM najprv prejde do statického bloku ešte predtým, ako v programe vyhľadá metódu main().
Príklad
class Demo { static //static block { System.out.println('Static block'); } public static void main(String args[]) //static method { System.out.println('Static method'); } }
Výkon:
Static block Static method
Pozorujeme, že JVM najskôr vykoná statický blok, ak je v programe prítomný. Potom hľadá metódu main(). Ak sa metóda main() nenájde, zobrazí chybu.
Príklad
Program, ktorý nemá metódu main(), zobrazí chybu pri spustení.
class DemoStaticBlock { Static //static block { System.out.println('Static block'); } }
Výkon:
Error: Main method not found in the class Demo, please define the main method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application
Takže metóda main() by mala byť vždy napísaná ako:
public static void main(String args[])
Môžeme zameniť verejné a statické a napísať to takto:
static public void main(String args[])
Môžeme tiež použiť iný názov pre pole typu String a napísať ho ako:
static public void main(String[] x)
Rôzne spôsoby zápisu metódy main() sú:
static public void main(String []x) static public void main(String...args)
Reťazec...argumenty: Umožňuje metóde akceptovať nula alebo viacero argumentov. Medzi reťazcom a poľom by mali byť presne tri bodky; v opačnom prípade vypíše chybu.
Príklad
Program, ktorý nemá metódu main(), ale úspešne sa skompiluje a spustí.
abstract class DemoNoMain extends javafx.application.Application { static //static block { System.out.println('Java'); System.exit(0); } }
Výkon:
Java
Preťaženie metódy main().
Preťažiť môžeme aj metódu main(). Môžeme definovať ľubovoľný počet metód main() v triede, ale podpis metódy musí byť odlišný.
Príklad
class OverloadMain { public static void main(int a) //overloaded main method { System.out.println(a); } public static void main(String args[]) { System.out.println('main method incoked'); main(6); } }
Výkon:
názov mesta USA
main method invoked 6