Oracle hat die Verfügbarkeit von Java 22 angekündigt, der neuesten Version der führenden Programmiersprache und Entwicklungsplattform. Java 22 (Oracle JDK 22) bietet Tausende von Leistungs-, Stabilitäts- und Sicherheitsverbesserungen, die Entwicklern helfen, ihre Produktivität zu steigern, Innovationen voranzutreiben und das Wachstum in ihren Unternehmen zu beschleunigen. Dazu gehören Verbesserungen der Java-Sprache, ihrer APIs und Leistung sowie der im Java Development Kit (JDK) enthaltenen Tools.

Das neueste JDK bietet Updates und Verbesserungen mit 12 JDK Enhancement Proposals (JEPs). JDK 22 bietet Sprachverbesserungen aus dem OpenJDK Project Amber (Statements before super[?], Unnamed Variables & Patterns, String Templates und Implicitly Declared Classes and Instance Main Methods), Verbesserungen aus dem Projekt Panama (Foreign Function & Memory API und Vector API), Funktionen im Zusammenhang mit dem Projekt Loom (Structured Concurrency und Scoped Values), Kernbibliotheken und Toolfunktionen (Class-File API, Launch Multi-File Source-Code Programs und Stream Gatherers) sowie Leistungsverbesserungen (Region Pinning für G1). Die wichtigsten Aktualisierungen in Java 22 sind: Project Amber-Funktionen: JEP 447: Anweisungen vor super(?): Gibt Entwicklern die Freiheit, das Verhalten von Konstruktoren auszudrücken.

Indem Anweisungen, die nicht auf die zu erstellende Instanz verweisen, vor einem expliziten Konstruktoraufruf erscheinen können, ermöglicht diese Funktion eine natürlichere Platzierung von Logik, die in statischen Hilfsmethoden, Hilfskonstruktoren oder Konstruktorargumenten untergebracht werden muss. Außerdem bleibt die bestehende Sicherheit erhalten, dass die Konstruktoren während der Klasseninstanzierung in der Reihenfolge von oben nach unten ausgeführt werden, wodurch sichergestellt wird, dass der Code in einem Unterklassenkonstruktor die Instanzierung der Oberklasse nicht beeinträchtigen kann. Darüber hinaus erfordert diese Funktion keine Änderungen an der Java Virtual Machine (JVM) und stützt sich lediglich auf die derzeitige Fähigkeit der JVM, Code zu überprüfen und auszuführen, der vor expliziten Konstruktoraufrufen innerhalb von Konstruktoren erscheint.

JEP 456: Unbenannte Variablen und Patterns: Verbessert die Produktivität von Entwicklern, indem die Java-Sprache um unbenannte Variablen und Muster erweitert wird, die verwendet werden können, wenn Variablendeklarationen oder verschachtelte Muster erforderlich sind, aber nie verwendet werden. Dies verringert die Fehleranfälligkeit, verbessert die Lesbarkeit von Satzmustern und erhöht die Wartbarkeit des gesamten Codes. JEP 459: String Templates (Zweite Vorschau): Vereinfacht die Entwicklung von Java-Programmen, indem es einfach ist, Strings auszudrücken, die zur Laufzeit berechnete Werte enthalten, und verbessert gleichzeitig die Sicherheit von Programmen, die Strings aus vom Benutzer bereitgestellten Werten zusammenstellen und an andere Systeme weitergeben. Darüber hinaus wird die Lesbarkeit von Ausdrücken, die mit Text gemischt sind, verbessert, und Werte, die keine Strings sind und aus literalem Text und eingebetteten Ausdrücken berechnet werden, können erstellt werden, ohne eine zwischengeschaltete String-Darstellung durchlaufen zu müssen.

JEP 463: Implizit deklarierte Klassen und Instanz-Hauptmethoden (Zweite Vorschau): Beschleunigt das Lernen, indem es einen sanften Einstieg in die Java-Programmierung bietet, der es den Schülern ermöglicht, ihre ersten Programme zu schreiben, ohne dass sie die für große Programme konzipierten Sprachfunktionen verstehen müssen. Mit dieser Funktion können Pädagogen Konzepte schrittweise einführen und Studenten können schlanke Deklarationen für Programme mit einer Klasse schreiben und ihre Programme nahtlos erweitern, um fortgeschrittenere Funktionen zu nutzen, wenn ihre Fähigkeiten wachsen. Project Loom-Funktionen: JEP 462: Structured Concurrency (Zweite Vorschau): Hilft Entwicklern bei der Rationalisierung von Fehlerbehandlung und Stornierung und verbessert die Beobachtbarkeit durch die Einführung einer API für strukturierte Gleichzeitigkeit. Dadurch wird ein Stil der gleichzeitigen Programmierung gefördert, der die üblichen Risiken, die sich aus dem Abbruch und dem Herunterfahren ergeben, beseitigen kann ?

wie z.B. Lecks in Threads und Verzögerungen bei der Annullierung ? und verbessert die Beobachtbarkeit von nebenläufigem Code. JEP 464: Scoped Values (Zweite Vorschau): Erhöht die Benutzerfreundlichkeit, Verständlichkeit, Leistung und Robustheit von Entwicklerprojekten, indem die gemeinsame Nutzung unveränderlicher Daten innerhalb und zwischen Threads ermöglicht wird.

Projekt Panama Eigenschaften: JEP 454: Foreign Function & Memory API: Erhöht die Benutzerfreundlichkeit, Flexibilität, Sicherheit und Leistung für Entwickler durch die Einführung einer API, die es Java-Programmen ermöglicht, mit Code und Daten außerhalb der Java-Laufzeit zu interagieren. Durch den effizienten Aufruf fremder Funktionen, wie z.B. Code außerhalb der Java Virtual Machine, und durch den sicheren Zugriff auf fremden Speicher (d.h. Speicher, der nicht von der JVM verwaltet wird), ermöglicht die neue API Java-Programmen den Aufruf nativer Bibliotheken und die Verarbeitung nativer Daten, ohne dass die Java Native Interface erforderlich ist. JEP 460: Vektor-API (Siebter Inkubator): Ermöglicht es Entwicklern, eine höhere Leistung als bei äquivalenten skalaren Berechnungen zu erzielen, indem eine API eingeführt wird, um Vektorberechnungen auszudrücken, die zur Laufzeit zuverlässig in Vektorbefehle auf unterstützten CPU-Architekturen kompiliert werden.

Kernbibliotheken & Tools Funktionen: JEP 457: Klassendatei-API (Vorschau): Hilft Entwicklern, ihre Produktivität zu steigern, indem es eine Standard-API für das Parsen, Generieren und Transformieren von Java-Klassendateien bereitstellt. JEP 458: Starten von Programmen mit mehreren Quellcode-Dateien: Ermöglicht es Entwicklern zu entscheiden, ob und wann sie ein Build-Tool konfigurieren möchten, indem der Java Application Launcher so erweitert wird, dass er ein Programm ausführen kann, das als mehrere Dateien mit Java-Quellcode geliefert wird. JEP 461: Stream Gatherers (Vorschau): Hilft Entwicklern, ihre Produktivität zu steigern, indem die Stream-API so erweitert wird, dass sie benutzerdefinierte Zwischenoperationen unterstützt, die es Stream-Pipelines ermöglichen, Daten auf eine Weise zu transformieren, die mit den vorhandenen eingebauten Zwischenoperationen nicht ohne weiteres möglich ist.

Indem Stream-Pipelines flexibler und ausdrucksstärker werden und benutzerdefinierte Zwischenoperationen Streams unendlicher Größe manipulieren können, ermöglicht diese Funktion Entwicklern, beim Lesen, Schreiben und Warten von Java-Code effizienter zu werden.