Java 9 (JDK 9): Wichtigste Features & Vorteile – Modularität, JShell, HTTP/2 & mehr
Hauptziele von Java 9
- Modularität: JDK & Java SE Plattform modularisieren (skalierbar bis zu kleinen Geräten).
- Sicherheit: Gesamte JDK-Sicherheit verbessern.
- Build & Wartung: Build-Prozess & Pflege großer Codebasen vereinfachen (SE & EE).
- Standard-Modulsystem: Einheitliches Modulsystem für Plattform & JDK.
Erschienen: 21. September 2017. Über 90 Erweiterungen gegenüber Java 8.
Die bedeutendsten neuen Features
| Feature | Beschreibung |
|---|---|
| Module System (Jigsaw) | Neuer Programmkomponente „Module“: benannt, selbstbeschreibend, kapselt Code & Daten. Basis für modulare JDK & Anwendungen. |
| REPL – JShell | Read-Eval-Print-Loop für Java: Interaktives Ausprobieren von Code ohne Kompilierung. |
| HTTP/2 Client | Neue java.net.http.HttpClient API: HTTP/2, WebSockets, Server Push, Reactive Streams. |
| HTML5 Javadoc | Javadoc generiert HTML5 Output, integrierte Suchfunktion in API-Docs. |
| Multi-Release JAR | JARs können klassenversionsspezifische Implementierungen enthalten (META-INF/versions/9/). |
| Collection Factory Methods | List.of(), Set.of(), Map.of(), Map.ofEntries() – immutable Collections kompakt erzeugen. |
| Private Interface Methods | Interfaces dürfen private & private static Methoden haben (Code-Wiederverwendung in Default-Methoden). |
| Process API Improvements | ProcessHandle: Native PID, Startzeit, CPU-Zeit, Argumente, User, Parent/Children, onExit() CompletableFuture. |
| Stream API Enhancements | takeWhile, dropWhile, iterate(seed, hasNext, next), ofNullable. |
| Try-with-Resources Verbesserung | Effectively-final Variablen direkt in try(...) nutzbar (keine neue Variable nötig). |
| @Deprecated Enhancements | forRemoval & since Attribute für präzisere Deprecation-Infos. |
| Diamond Operator für Anonyme Klassen | new Handler<>(1) { ... } – Typinferenz auch bei anonymen inneren Klassen. |
| Optional Verbesserungen | stream(), ifPresentOrElse(), or(Supplier). |
| Multi-Resolution Image API | MultiResolutionImage, BaseMultiResolutionImage – mehrere Auflösungen als ein logisches Image. |
| CompletableFuture API | Delays/Timeouts (completeOnTimeout, orTimeout), Subclassing-Support, neue Factory-Methoden. |
| Lightweight JSON API | javax.json (JSR 374) – Parsen/Generieren ohne schwere Abhängigkeiten. |
| Reactive Streams API | java.util.concurrent.Flow (Publisher, Subscriber, Processor, Subscription) – Standard für Reactive Programming. |
Modul-System im Detail
Ein Modul wird durch module-info.java definiert:
module com.beispiel.meinmodul {
requires java.sql;
exports com.beispiel.meinmodul.api;
uses com.beispiel.spi.Service;
provides com.beispiel.spi.Service with com.beispiel.impl.ServiceImpl;
}
requires– Abhängigkeiten zu anderen Modulen.exports– Öffentliche Pakete.uses/provides– Service Loader Mechanism.
jlink – Custom Runtime Images
Neues Tool jlink erstellt minimale, anwendungsspezifische JREs:
jlink --module-path $JAVA_HOME/jmods:out/modules \
--add-modules com.beispiel.meinmodul \
--output mein-jre
Resultat: mein-jre/ enthält nur benötigte Module – ideal für Container & Deployment.
Fazit
Java 9 ist ein Meilenstein-Release, das die Plattform für die nächsten Jahre grundlegend modernisiert. Das Modulsystem ist die größte Änderung seit Generics (Java 5).
Java
- Java Operatoren meistern: Typen, Syntax und praktische Beispiele
- Java Kommentare: Typen, Verwendung und Best Practices
- Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
- Java Strings meistern: Erstellung, Methoden und Best Practices
- Java Programmiersprache: Evolution, Versionen und Anwendungen
- C-Programmiersprache: Umfassender Überblick
- Java 10: Neue Features, Release-Modell & OpenJDK-Fokus im Überblick
- Java 9 Process API Verbesserungen: ProcessHandle, Info & asynchrone Events
- Java 9 Stream API Erweiterungen: takeWhile, dropWhile, iterate & ofNullable
- Java 9 Multi-Resolution Image API: Responsive Grafiken mit mehreren Auflösungen