HomeRatgeberJava

Neues in Java 9

Im März 2014 wurde Java 8 final und der Nachfolger ist Java 9. Der Zeitplan bis zum Release war:

  • 2016-05-26 Feature Complete ✔
  • 2016-12-22 Feature Extension Complete ✔
  • 2017-01-05 Rampdown Start ✔
  • 2017-02-09 All Tests Run ✔
  • 2017-02-16 Zero Bug Bounce ✔
  • 2017-03-16 Rampdown Phase 2 ✔
  • 2017-07-06 Final Release Candidate ✔
  • 2017-09-21 General Availability ✔

Der Nachfolger von Java 9 ist Java 10 (aka Java 18.3), was seit März 2018 verfügbar ist.

JEPs (JDK Enhancements)

Die wichtigsten JEPs (JDK Enhancements) für Java 9:

Wichtige Features

Weitere JEPs

Und weitere JEPs (244-295) für verschiedene Verbesserungen und neue Features.

Modulsystem Jigsaw

In den letzten Jahren gab es immer Diskussionen um ein Modulsystem. Dabei vermischen sich zwei Dinge: einmal, dass Oracle selbst für das JDK intern ein Modulsystem nutzen möchte und einmal, dass Entwickler selbst ihre Anwendungen modularisieren können, so ähnlich wie es mit OSGi möglich ist. Das Modulsystem war eigentlich soweit fertig, wurde dann aber doch auf Java 9 verschoben.

Modulsystem Ressourcen:

Repository und Dokumentation

Wie beim Java 8 bildet das OpenJDK die Referenzimplementierung, auf deren Basis das Oracle JDK stehen wird. Das Mercurial Repository ist offen. Change-Sets der Builds dokumentieren die Änderungen.

Mailing-Listen:

IDE-Unterstützung

Java 9 nutzt für den Compiler die neue Modul-Infrastruktur, weshalb eine IDE angepasst werden muss. Aktuelle Versionen von Eclipse unterstützen längst Java 9, das gleiche gilt für IntelliJ und sogar NetBeans.

Wichtige Neuerungen im Detail

Collection Factory Methods (JEP 269)

Java 9 führt neue Factory-Methoden für Collections ein:

List<String> list = List.of("a", "b", "c");
Set<String> set = Set.of("a", "b", "c");
Map<String, Integer> map = Map.of("a", 1, "b", 2);

Stream API Erweiterungen

Neue Methoden in der Stream API:

  • takeWhile() - nimmt Elemente solange eine Bedingung erfüllt ist
  • dropWhile() - überspringt Elemente solange eine Bedingung erfüllt ist
  • Stream.ofNullable() - erstellt einen Stream aus einem möglicherweise null-Wert

Optional Verbesserungen

  • ifPresentOrElse() - führt eine Aktion aus wenn Wert vorhanden ist, sonst eine andere
  • or() - gibt einen alternativen Optional zurück wenn leer
  • stream() - konvertiert Optional zu Stream

Process API (JEP 102)

Verbesserte API zur Prozesskontrolle:

  • ProcessHandle - bessere Kontrolle über Prozesse
  • ProcessBuilder.startPipeline() - Prozess-Pipelines
  • Informationen über Prozess-IDs und Hierarchien

HTTP/2 Client (JEP 110)

Neuer HTTP Client mit HTTP/2 und WebSocket-Unterstützung als Incubator-Feature.

Neue Typen und wichtige API-Änderungen

Java 9 bringt hunderte neuer Methoden und Typen mit sich, darunter:

  • Module System: java.lang.Module, java.lang.ModuleLayer, verschiedene Moduldeskriptor-Klassen
  • Multi-Resolution Images: Unterstützung für verschiedene Auflösungen in Images
  • Variable Handles: Low-level Zugriff auf Felder und Array-Elemente
  • Stack-Walking API: Effiziente Analyse von Stack-Traces
  • Desktop Integration: Erweiterte Desktop-Features für plattformspezifische Integration

Entfernte Features

  • Java Applets: Die Applet API wurde als deprecated markiert
  • Diverse @Deprecated Tools: Verschiedene Tools und APIs wurden entfernt oder als deprecated markiert

Fazit

Java 9 ist ein bedeutender Meilenstein in der Java-Entwicklung, hauptsächlich durch das neue Modulsystem (Project Jigsaw). Weitere wichtige Verbesserungen umfassen die Collection Factory Methods, Stream API Erweiterungen, die neue Process API und viele kleinere Verbesserungen in der Standard-Bibliothek.

Das Modulsystem ermöglicht es, kleinere Runtime-Images zu erstellen und bessere Kapselung zu erreichen, was besonders für große Anwendungen und die JDK-Entwicklung selbst von Vorteil ist.