Was bisher geschah
In unserem Blogpost zu Java 23 haben wir uns angeschaut, wie „Implicitly Declared Classes and Instance Main Methods“ die Einstiegshürde für Java niedriger setzt und fortgeschritteneren Entwicklern erlaubt, insbesondere beim Erstellen von Skripten mit Java auf unnötigen Boilerplate-Code zu verzichten. Mit Java 25 wurde das Feature nun finalisiert und umbenannt zu „Compact Source Files and Instance Main Methods“.
Die Zielgruppe sind weniger Entwickler von typischen Anwendungen mit Quarkus, Spring Boot oder Jakarta EE – das Ganze richtet sich eher an Einsteiger, die mit Java 25 starten möchten, an Profis, die mit Java Skripte erstellen wollen und an Lehrende, die ihr Material vervollständigen möchten.
Hello World – früher und heute
Zur Erinnerung hier das klassische Hello-World-Beispiel. Vor Java 23 sah das so aus:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Jetzt lässt sich dieser Code auf das Wesentliche reduzieren:
void main() {
IO.println("Hello, World!");
}
Keine Klassendeklaration, keine Imports, einfachere Ein- und Ausgabe, keine unnötige Zeremonie für Sichtbarkeit oder Parameter, die eh nicht benötigt werden.
Was sich ändert
In Java 23 befand sich das Feature im dritten Preview. Nach einem vierten Preview in Java 24 ist es nun in Java 25 finalisiert. Neben der Umbenennung gab es im Wesentlichen noch eine kleine Änderung:
Die Klasse IO mit ihren Methoden print(), println() und readln() wurde von java.io nach java.lang verschoben und wird dadurch automatisch importiert.
Zwar basieren diese Methoden nun intern nicht mehr auf der Klasse java.io.Console, sondern verwenden direkt System.in und System.out, aber das ist im typischen Entwickleralltag nicht relevant.
Wer bisher System.out.println() in einer Methode seiner Spring-Boot-Anwendung verwendet hat, wird auch mit IO.println() die gleichen Probleme haben wie bisher. Die blockierende Ausgabe wird bei vielen parallelen Aufrufen schnell zum Flaschenhals, weder Ausgabeformat noch Ziel können konfiguriert werden, es gibt keinen Kontext, und in Tests kann die Ausgabe nicht abgeschaltet werden. Ein Logging-Framework ist hier die sinnvolle Wahl.
Lediglich bei der Entwicklung in IDEs und in CI-Pipelines ist ein Unterschied erkennbar: System.out ist immer verfügbar, Console nur beim Start in einem echten Terminal.
Was bleibt
Was erhalten bleibt, ist der automatische Import des gesamten Moduls java.base. Es können also Klassen aus vielen Paketen direkt ohne Imports verwendet werden: java.io, java.time, java.util – mit jeweils all ihren Unterpaketen. Das verkürzt die Quelldateien und erleichtert die Lesbarkeit.
Fazit
Nach vier Preview-Runden ist das Feature „JEP 512: Compact Source Files and Instance Main Methods“ nun stabil und kann damit in der Produktion eingesetzt werden, und auch die Einstiegshürde für Java-Neulinge wird weiter gesenkt.






