Funkcja main() jest punktem wyjścia dla maszyny JVM do rozpoczęcia wykonywania programu Java. Bez metody main() JVM nie wykona programu. Składnia metody main() jest następująca:
publiczny: Jest to specyfikator dostępu. Powinniśmy użyć słowa kluczowego public przed metodą main(), aby JVM mógł zidentyfikować punkt wykonania programu. Jeśli przed metodą main() użyjemy metody private,protected i default, nie będzie ona widoczna dla JVM.
statyczny: Metodę można uczynić statyczną, używając słowa kluczowego static. Powinniśmy wywołać metodę main() bez tworzenia obiektu. Metody statyczne to metody, które wywołują się bez tworzenia obiektów, więc nie potrzebujemy żadnego obiektu, aby wywołać metodę main().
próżnia: W Javie każda metoda ma typ zwracany. Słowo kluczowe Void potwierdza kompilatorowi, że metoda main() nie zwraca żadnej wartości.
główny(): Jest to podpis domyślny, który jest predefiniowany w maszynie JVM. Jest wywoływany przez JVM w celu wykonania programu linia po linii i zakończenia wykonywania po zakończeniu tej metody. Możemy również przeciążyć metodę main().
Argumenty ciągu[]: Metoda main() również akceptuje niektóre dane od użytkownika. Akceptuje grupę ciągów, która nazywa się tablicą ciągów. Służy do przechowywania argumentów wiersza poleceń w postaci wartości łańcuchowych.
main(String args[])
Tutaj agrs[] jest nazwą tablicy i jest typu String. Oznacza to, że może przechowywać grupę ciągów. Pamiętaj, że ta tablica może również przechowywać grupę liczb, ale tylko w postaci ciągu znaków. Wartości przekazywane do metody main() nazywane są argumentami. Argumenty te są przechowywane w tablicy args[], więc zazwyczaj używa się do tego nazwy args[].
Co się stanie, jeśli metoda main() zostanie napisana bez argumentów String[]?
Program się skompiluje, ale nie uruchomi, ponieważ JVM nie rozpoznaje metody main(). Pamiętaj, że JVM zawsze szuka metody main() z tablicą typu string jako parametrem.
Proces wykonania
Najpierw JVM wykonuje blok statyczny, następnie wykonuje metody statyczne, a następnie tworzy obiekt potrzebny programowi. Na koniec wykonuje metody instancji. JVM wykonuje blok statyczny na podstawie najwyższego priorytetu. Oznacza to, że JVM najpierw przechodzi do bloku statycznego, zanim jeszcze zacznie szukać w programie metody main().
Przykład
class Demo { static //static block { System.out.println('Static block'); } public static void main(String args[]) //static method { System.out.println('Static method'); } }
Wyjście:
Static block Static method
Obserwujemy, że JVM najpierw wykonuje blok statyczny, jeśli jest on obecny w programie. Następnie szuka metody main(). Jeśli metoda main() nie zostanie znaleziona, wystąpi błąd.
Przykład
Program, który nie ma metody main(), powoduje błąd w czasie wykonywania.
class DemoStaticBlock { Static //static block { System.out.println('Static block'); } }
Wyjście:
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
Zatem metodę main() należy zawsze zapisywać jako:
public static void main(String args[])
Możemy zamienić publiczne i statyczne i zapisać to w następujący sposób:
static public void main(String args[])
Możemy również użyć innej nazwy tablicy typu String i zapisać ją jako:
static public void main(String[] x)
Różne sposoby pisania metody main() to:
static public void main(String []x) static public void main(String...args)
Ciąg...argumenty: Pozwala metodzie akceptować zero lub wiele argumentów. Pomiędzy ciągiem a tablicą powinny znajdować się dokładnie trzy kropki; w przeciwnym razie wyświetla błąd.
Przykład
Program, który nie ma metody main(), ale kompiluje się i działa pomyślnie.
abstract class DemoNoMain extends javafx.application.Application { static //static block { System.out.println('Java'); System.exit(0); } }
Wyjście:
Java
Przeciążenie metody main().
Możemy również przeciążyć metodę main(). W klasie możemy zdefiniować dowolną liczbę metod main(), jednak sygnatura metody musi być inna.
Przykład
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); } }
Wyjście:
kolejka w Javie
main method invoked 6