main și structura unui program în Java

Orice program Java pornește din metoda main a unei clase: public static void main(String[] args).

Sintaxă
public class Main {
    public static void main(String[] args) {
        // instrucțiuni
    }
}

Ce face main și structura unui program

În Java tot codul stă în clase. Un program are cel puțin o clasă, iar mașina virtuală (JVM) pornește execuția din metoda ei main. Forma clasică este public static void main(String[] args): public ca JVM-ul s-o poată apela, static ca să nu fie nevoie de un obiect, void pentru că nu returnează nimic.

O clasă public trebuie să stea într-un fișier cu același nume: clasa Main în Main.java. Fișierul se compilează cu javac Main.java (rezultă Main.class, cu bytecode) și se rulează cu java Main. Fiecare instrucțiune se termină cu ;, iar blocurile sunt delimitate de acolade.

args conține argumentele din linia de comandă: java Main Ana Iași dă args[0] = "Ana" și args[1] = "Iași". Din Java 25 există și o formă scurtă pentru începători: un fișier care conține doar void main() { ... }, fără clasă declarată explicit.

Parametri

Parametru Descriere
args Tablou de String cu argumentele din linia de comandă. Fără argumente, tabloul este gol (args.length == 0), nu null.

Exemple

Exemplul 1: Primul program

System.out.println afișează textul și trece la rândul următor; System.out.print nu trece la rând nou. Comentariile // și /* ... */ sunt ignorate de compilator.

public class Main {
    // execuția începe aici
    public static void main(String[] args) {
        System.out.println("Salut, lume!");
        System.out.print("Învăț Java ");
        System.out.print("pe dexblog.ro");
        System.out.println(); /* doar rând nou */
        System.out.println("2 + 3 = " + (2 + 3));
    }
}

Rezultat

Salut, lume!
Învăț Java pe dexblog.ro
2 + 3 = 5

Exemplul 2: Argumentele din linia de comandă

Programul a fost pornit fără argumente, deci args.length este 0 și se folosește numele implicit. Cu java Main Maria ar afișa „Bună, Maria!”.

public class Main {
    public static void main(String[] args) {
        System.out.println("Număr de argumente: " + args.length);
        String nume = args.length > 0 ? args[0] : "Ana";
        System.out.println("Bună, " + nume + "!");
        for (int i = 0; i < args.length; i++) {
            System.out.println("args[" + i + "] = " + args[i]);
        }
    }
}

Rezultat

Număr de argumente: 0
Bună, Ana!

Exemplul 3: Mai multe metode și o clasă ajutătoare

Un fișier poate conține mai multe clase, dar doar una public, cu numele fișierului. main apelează alte metode statice ale clasei.

class Calculator {
    static int suma(int a, int b) {
        return a + b;
    }
}

public class Main {
    static void saluta(String oras) {
        System.out.println("Salutări din " + oras + "!");
    }

    public static void main(String[] args) {
        saluta("Iași");
        saluta("Cluj");
        System.out.println("Total: " + Calculator.suma(150, 75) + " lei");
    }
}

Rezultat

Salutări din Iași!
Salutări din Cluj!
Total: 225 lei

Greșeli frecvente

  • Clasa publică are alt nume decât fișierul: public class Program în Main.java dă eroarea class Program is public, should be declared in a file named Program.java.
  • Semnătura greșită pentru main (de exemplu public void main(String args)): programul se compilează, dar java Main nu găsește punctul de pornire.
  • Uitarea lui ; la finalul instrucțiunii: error: ';' expected.

Comenzi înrudite

  • Metode: O metodă grupează cod sub un nume, primește parametri și poate returna o valoare; Java permite supraîncărcare și varargs.
  • static: static leagă un câmp sau o metodă de clasă, nu de un obiect: există o singură copie, accesată prin numele clasei.
  • javac: javac este compilatorul Java: transformă fișierele .java în fișiere .class (bytecode) și raportează erorile și avertismentele.
  • java (lansatorul): java pornește mașina virtuală Java și rulează un program: o clasă compilată, un fișier .jar sau direct un fișier sursă .java.
  • Clase și obiecte (class): O clasă (cuvântul cheie class) descrie un tip nou: câmpuri pentru date și metode pentru comportament; obiectele sunt instanțele ei.