Metoda main este punctul de intrare obligatoriu al oricărui program Java standard, fiind prima funcție executată de JVM (Java Virtual Machine). În practică, indiferent cât de complexă devine arhitectura aplicației tale cu Spring Boot sau microservicii, tot acest punct de start rămâne fundamental pentru debugging, deployment și înțelegerea fluxului de execuție. Stăpânirea sa corectă este esențială pentru a evita erori de compilare și pentru a scrie cod curat, ușor de testat.
Concepte cheie
- Public: Specificatorul de acces permite ca metoda
mainsă fie vizibilă și apelabilă din exteriorul clasei, fiind necesar pentru JVM. - Static: Indică faptul că metoda aparține clasei, nu unei instanțe, permițând rularea ei înainte de crearea oricărui obiect.
- void: Semnifică absența unei valori returnate, deoarece
maininițiază execuția, dar nu întoarce date către sistemul de operare în mod direct. - main: Este numele convențional impus de specificația Java; schimbarea lui duce la eroarea „Main method not found”.
- String[] args: Permite transmiterea de argumente de linie de comandă către aplicație, utile pentru configurări rapide sau scripturi automate.
- Clasa publică: Numele fișierului
.javatrebuie să coincidă exact cu numele clasei care conținemain. - JVM Entry Point: Este contractul standard prin care mașina virtuală identifică unde începe logica de business principală.
Exemplu practic
Un scenariu real implică citirea unui parametru de configurare trimis la rulare. Iată cum arată o implementare robustă:
public class App {
public static void main(String[] args) {
// Verificăm dacă s-a primit un argument
if (args.length > 0) {
System.out.println("Salut, " + args[0] + "!");
} else {
System.out.println("Te rog să introduci un nume.");
}
}
}
La rulare cu java App Ion, output-ul va fi „Salut, Ion!”. Acest pattern simplu este baza pentru citirea configurațiilor în aplicațiile enterprise înainte de inițializarea containerului Spring.
Greșeli frecvente
- Modificatori lipsă sau extra: Scurtarea semnăturii la
public void main(String[] args)sau adăugareastaticlipsei cauzează erori de compilare majore. - Nume incorect al clasei: Dacă clasa este
public, fișierul trebuie să se numească exactNumeClasa.java. Orice discrepanță blochează build-ul. - Ignorarea
args: Multe aplicații producătoare au nevoie de parametri (port, URL DB). Ignorarea acestui array limitează flexibilitatea aplicației. - Cod logic direct în main: Deși funcționează, punerea întregii logici de business în
mainface codul greu de testat unitar și de întreținut.
Întrebări de interviu
Întrebare: De ce metoda main trebuie să fie static?
Răspuns: Pentru că JVM are nevoie să o apeleze înainte de a crea orice instanță a clasei. Dacă nu ar fi statică, ar trebui să instanțiem clasa mai întâi, ceea ce creează o buclă logică imposibil de rezolvat.
Întrebare: Ce se întâmplă dacă modifici public în private la main?
Răspuns: Codul compilează, dar la rulare primești o eroare NoSuchMethodError. JVM caută explicit o metodă publică pentru a intra în aplicație.
Întrebare: Poți avea mai multe metode main într-un proiect?
Răspuns: Da, poți avea mai multe clase cu câte un main, dar JVM va executa doar metoda main din clasa specificată la comanda de rulare (java NumeClasa).
Exercițiu
Scrie o clasă numită CalculatorSimple cu un main care primește doi parametri numerici de la linia de comandă (args[0] și args[1]). Converteste acești parametri din String în int folosind Integer.parseInt(). Afișează suma lor. Gestionează excepția NumberFormatException într-un bloc try-catch pentru a afișa un mesaj prietenos dacă utilizatorul introduce litere în loc de numere. Timp estimat: 45 minute.