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:
- Quelltext
Hallo.javaschreiben. javacparst, prüft Typen und Namen, optimiert leicht und schreibtHallo.class.javastartet die JVM, der Klassenlader lädt die.class-Dateien.- 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:allzeigt 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:
javacführt Annotationsprozessoren aus, die zum Beispiel Code erzeugen (Lombok, MapStruct). - Einzeldatei-Modus: Seit Java 11 startet
java Hallo.javaeine einzelne Quelldatei direkt, der Compiler läuft dabei im Speicher.
Siehe auch: Bytecode, Compiler, JIT-Compiler (Just-in-Time)