java (lansatorul) în Java

Module și unelte JDK JDK 1.0 (fișier sursă direct: Java 11, mai multe fișiere sursă: Java 22)

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.

Sintaxă
java Main arg1 arg2                 # rulează o clasă compilată
java -cp out:lib/x.jar ro.dexblog.App # cu classpath și nume complet
java -jar aplicatie.jar             # rulează un jar executabil
java Main.java                      # compilează în memorie și rulează sursa
java -Dcheie=valoare -Xmx512m Main  # proprietăți și setări JVM

Ce face java (lansatorul)

Comanda java pornește JVM-ul, încarcă clasa dată și îi apelează metoda main. Numele clasei se scrie fără .class și, dacă e într-un pachet, cu numele complet: java -cp out ro.dexblog.meteo.App. Tot ce urmează după numele clasei ajunge în args.

Clasele sunt căutate în classpath: directorul curent implicit sau ce dai cu -cp (directoare și fișiere .jar, separate prin : pe Linux și macOS și ; pe Windows). java -jar app.jar rulează clasa din Main-Class, din manifestul jar-ului. Pentru module se folosește --module-path și -m.

Din Java 11, java Main.java compilează sursa în memorie și o rulează, fără fișiere .class; din Java 22 sursa poate folosi și alte fișiere .java din același director. Opțiuni utile: -Dcheie=valoare (proprietăți citite cu System.getProperty), -ea (activează assert), -Xmx512m (memoria maximă), -version, --enable-preview.

Exemple

Exemplul 1: Clasă compilată și sursă directă

Același program rulat în trei feluri. Cu sursa directă nu apare niciun fișier .class pe disc. java App.java găsește singur clasa Prognoza din Prognoza.java, aflat în același director.

// App.java
public class App {
    public static void main(String[] args) {
        System.out.println(Prognoza.pentru("Iași"));
    }
}

// Prognoza.java
class Prognoza {
    static String pentru(String oras) {
        return oras + ": senin, 14 °C";
    }
}

Rezultat în terminal

$ java App.java
Iași: senin, 14 °C
$ ls
App.java
Prognoza.java

$ javac -d out App.java Prognoza.java
$ java -cp out App
Iași: senin, 14 °C

$ java -version
openjdk version "27" 2026-09-15
OpenJDK Runtime Environment Homebrew (build 27)
OpenJDK 64-Bit Server VM Homebrew (build 27, mixed mode, sharing)

Exemplul 2: Proprietăți -D și informații despre JVM

Exemplele de pe site sunt rulate cu java -Dfile.encoding=UTF-8 -Dstdout.encoding=UTF-8 Main, fără argumente. Proprietatea tema nu a fost dată, deci se folosește valoarea implicită. Cu java -Dtema=intunecata Main s-ar afișa „intunecata”.

public class Main {
    public static void main(String[] args) {
        System.out.println("argumente: " + args.length);
        System.out.println("tema: " + System.getProperty("tema", "luminoasă"));
        System.out.println("stdout.encoding: " + System.getProperty("stdout.encoding"));
        System.out.println("versiunea Java: " + Runtime.version().feature());
        System.out.println("aserțiuni active: " + Main.class.desiredAssertionStatus());
        System.out.println("nuclee disponibile > 0: " + (Runtime.getRuntime().availableProcessors() > 0));
    }
}

Rezultat

argumente: 0
tema: luminoasă
stdout.encoding: UTF-8
versiunea Java: 27
aserțiuni active: false
nuclee disponibile > 0: true

Greșeli frecvente

  • Scrii extensia: java Main.class dă Could not find or load main class Main.class. Scrie java Main.
  • Rulezi o clasă din pachet cu numele scurt sau din directorul greșit: Could not find or load main class. Folosește -cp spre rădăcina pachetelor și numele complet.
  • Pui opțiunile JVM după numele clasei: java Main -Xmx512m trimite -Xmx512m în args. Opțiunile vin înaintea clasei.
  • Clasa nu are main cu semnătura corectă: Error: Main method not found in class Main.

Comenzi înrudite

  • javac: javac este compilatorul Java: transformă fișierele .java în fișiere .class (bytecode) și raportează erorile și avertismentele.
  • jar: jar împachetează clasele compilate (și resursele) într-o singură arhivă .jar, care poate fi distribuită și rulată cu java -jar.
  • main și structura unui program: Orice program Java pornește din metoda main a unei clase: public static void main(String[] args).
  • assert: assert verifică o condiție care ar trebui să fie mereu adevărată; aserțiunile sunt dezactivate implicit și se pornesc cu java -ea.
  • jshell: jshell este consola interactivă Java (REPL): scrii o expresie sau o instrucțiune și vezi imediat rezultatul, fără clasă și fără main.