void main
Kurz: Der feste Einstiegspunkt jedes ausführbaren Java-Programms — die JVM sucht beim Start genau diese Methodensignatur, um loszulegen.
Genauer: Die exakte Signatur ist vorgeschrieben: public static void main(String[] args). static, weil die Methode ohne vorher ein Objekt zu erzeugen aufgerufen werden muss; String[] args nimmt Kommandozeilenargumente entgegen, die dem Programm beim Start übergeben wurden.
public class Programm {
public static void main(String[] args) {
System.out.println("Hallo Welt");
}
}Im Detail
public class Programm {
public static void main(String[] args) {
if (args.length > 0) {
System.out.println("Erstes Argument: " + args[0]);
}
System.out.println("Hallo Welt");
}
}
// Aufruf über die Kommandozeile mit Argumenten:
// java Programm hallo welt
// -> args = {"hallo", "welt"}Jeder Teil der Signatur public static void main(String[] args) hat einen zwingenden Grund: public, damit die JVM (die selbst außerhalb der Klasse steht) die Methode überhaupt aufrufen darf. static, weil beim Programmstart noch KEIN Objekt der Klasse existiert — die JVM kann also keine Instanzmethode aufrufen, nur eine statische, klassengebundene. void, weil die Methode keinen Rückgabewert an die JVM liefert (das Programm signalisiert Erfolg/Fehler stattdessen über den Exit-Code via System.exit(code), nicht über return). String[] args nimmt schließlich alle Kommandozeilenargumente entgegen, mit denen das Programm gestartet wurde — bei java Programm hallo welt enthält args die beiden Strings "hallo" und "welt", der Programmname selbst ist NICHT Teil von args.
Eine einzelne Klasse kann durchaus mehrere main-Methoden mit unterschiedlichen Parametern enthalten (Overloading) — die JVM ruft beim Programmstart aber ausschließlich die EXAKTE Signatur public static void main(String[] args) auf, alle anderen wären nur normale, manuell aufrufbare Methoden. Seit Java 21 gibt es zusätzlich experimentell eine vereinfachte Einstiegspunkt-Syntax ohne umschließende Klasse und ohne public static/args, gedacht für kleine Lern-/Scriptprogramme.