EMZETT.
Login

javac (Java-Compiler)

Kurz: javac ist der Compiler des JDK. Er übersetzt Java-Quelltext (.java) in Bytecode (.class), den die JVM ausführen kann.

Genauer: Der Compiler prüft dabei Syntax und Typen und meldet Fehler, bevor das Programm überhaupt läuft. Er erzeugt keinen Maschinencode für den Prozessor, sondern plattformunabhängigen Bytecode.

Im Detail

javac Hallo.java          # erzeugt Hallo.class
java Hallo                # startet die JVM mit der Klasse
javac -d out src/*.java   # Ausgabeordner angeben
javac --release 17 Hallo.java   # Bytecode für Java 17 erzeugen
javap -c Hallo            # Bytecode lesbar anzeigen (Disassembler)

Der Ablauf von der Datei zum laufenden Programm:

  1. Quelltext Hallo.java schreiben.
  2. javac parst, prüft Typen und Namen, optimiert leicht und schreibt Hallo.class.
  3. java startet die JVM, der Klassenlader lädt die .class-Dateien.
  4. Die JVM interpretiert den Bytecode und übersetzt häufig laufende Teile per JIT-Compiler in Maschinencode.
  • Compilerfehler: Meist „cannot find symbol” (Name falsch geschrieben, Import fehlt), „incompatible types” (falscher Typ), „missing return statement”.
  • Warnungen: -Xlint:all zeigt zusätzliche Hinweise, zum Beispiel zu veralteten APIs.
  • Mehrere Dateien: Der Compiler findet abhängige Klassen über den Klassenpfad (-cp) oder Modulpfad.
  • Praxis: Meist übernehmen Maven, Gradle oder die IDE den Aufruf von javac.
  • Annotation-Processing: javac führt Annotationsprozessoren aus, die zum Beispiel Code erzeugen (Lombok, MapStruct).
  • Einzeldatei-Modus: Seit Java 11 startet java Hallo.java eine einzelne Quelldatei direkt, der Compiler läuft dabei im Speicher.

Siehe auch: Bytecode, Compiler, JIT-Compiler (Just-in-Time)