A main() a JVM kiindulópontja egy Java program végrehajtásának megkezdéséhez. A main() metódus nélkül a JVM nem hajtja végre a programot. A main() metódus szintaxisa a következő:
nyilvános: Ez egy hozzáférési specifikáció. Nyilvános kulcsszót kell használnunk a main() metódus előtt, hogy a JVM azonosítani tudja a program végrehajtási pontját. Ha a main() metódus előtt privát, védett és alapértelmezettet használunk, az nem lesz látható a JVM számára.
statikus: A static kulcsszó használatával statikussá tehet egy metódust. A main() metódust objektum létrehozása nélkül kell meghívnunk. A statikus metódusok azok a metódusok, amelyek az objektumok létrehozása nélkül hívnak meg, így nincs szükségünk objektumra a main() metódus meghívásához.
üres: Java-ban minden metódusnak van visszatérési típusa. A Void kulcsszó nyugtázza a fordítónak, hogy a main() metódus nem ad vissza értéket.
fő(): Ez egy alapértelmezett aláírás, amely előre meghatározott a JVM-ben. A JVM meghívja, hogy soronként hajtson végre egy programot, és a metódus befejezése után fejezze be a végrehajtást. A main() metódust is túlterhelhetjük.
String args[]: A main() metódus is elfogad néhány adatot a felhasználótól. Elfogadja a karakterláncok egy csoportját, amelyet string tömbnek neveznek. A parancssori argumentumok karakterlánc-értékek formájában történő tárolására szolgál.
main(String args[])
Itt az agrs[] a tömb neve, és String típusú. Ez azt jelenti, hogy képes egy karakterlánc-csoport tárolására. Ne feledje, hogy ez a tömb számok csoportját is tárolhatja, de csak karakterlánc formájában. A main() metódusnak átadott értékeket argumentumoknak nevezzük. Ezeket az argumentumokat args[] tömbben tárolják, ezért általában az args[] nevet használják rá.
Mi történik, ha a main() metódust String args[] nélkül írjuk?
A program lefordítja, de nem fut, mert a JVM nem ismeri fel a main() metódust. Ne feledje, hogy a JVM mindig a main() metódust keresi, paraméterként egy karakterlánc típusú tömböt.
Végrehajtási folyamat
A JVM először a statikus blokkot hajtja végre, majd statikus metódusokat hajt végre, majd létrehozza a program számára szükséges objektumot. Végül végrehajtja a példánymetódusokat. A JVM statikus blokkot hajt végre a legmagasabb prioritás alapján. Ez azt jelenti, hogy a JVM először statikus blokkra megy, még mielőtt a main() metódust keresné a programban.
Példa
class Demo { static //static block { System.out.println('Static block'); } public static void main(String args[]) //static method { System.out.println('Static method'); } }
Kimenet:
Static block Static method
Megfigyeljük, hogy a JVM először a statikus blokkot hajtja végre, ha az jelen van a programban. Ezután megkeresi a main() metódust. Ha a main() metódus nem található, hibát jelez.
Példa
A main() metódussal nem rendelkező program futás közben hibát ad.
class DemoStaticBlock { Static //static block { System.out.println('Static block'); } }
Kimenet:
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
Tehát a main() metódust mindig így kell írni:
public static void main(String args[])
Felcserélhetjük a nyilvános és statikus adatokat, és a következőképpen írhatjuk fel:
static public void main(String args[])
Más nevet is használhatunk a String típusú tömbhöz, és így írhatjuk:
static public void main(String[] x)
A main() metódus írásának különböző módjai a következők:
static public void main(String []x) static public void main(String...args)
String...args: Lehetővé teszi, hogy a metódus nulla vagy több argumentumot fogadjon el. Pontosan három pontnak kell lennie a String és a tömb között; ellenkező esetben hibát ad.
Példa
Olyan program, amelynek nincs main() metódusa, de lefordítható és sikeresen fut.
abstract class DemoNoMain extends javafx.application.Application { static //static block { System.out.println('Java'); System.exit(0); } }
Kimenet:
Java
A main() metódus túlterhelése
A main() metódust is túlterhelhetjük. Az osztályban tetszőleges számú main() metódust definiálhatunk, de a metódus aláírásának eltérőnek kell lennie.
Példa
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); } }
Kimenet:
java listák
main method invoked 6