Rückblick: Java Forum Stuttgart 2016 - das sind die Neuerungen von Java 9

Simon Ritter (Azul Systems)

Simon Ritter (Azul Systems)

Noch ein knappes drei viertel Jahr, dann soll es soweit sein, das Release von Java 9. Während Java 8 die Einführung von Lambdas, Streams und API Änderungen mit sich brachte, geht es bei Java 9 vor allem um Jigsaw, also zahlreiche Extras und Änderungen „unter der Motorhaube“. Neben den Themen der letzten beiden Blogbeiträge, JUnit 5 und Software Improvement, war das kommende Java Release natürlich auch auf dem Java Forum Stuttgart 2016 äußerst prominent. In der Session „Project Jigsaw in JDK 9: Modularity Comes to Java“ von Simon Ritter (Azul Systems) ging es ins Detail.

Daten aus http://openjdk.java.net/projects/jigsaw/

Daten aus http://openjdk.java.net/projects/jigsaw/

 

Hier die wichtigsten Neuerungen von Java 9:

  • Java trifft OSGi: Mit JDK 9 wird nun auch in der Java SE Modularisierung wie man sie aus OSGi kennt, per default mitgeliefert. Dazu wurde die Bibliotheken grundsätzlich umstrukturiert und es wurden tatsächlich (das erste Mal in der Java Geschichte) @deprecated Methoden/Klassen gelöscht. Zwar nur 6 von knapp 400, jedoch könnte es erst der Anfang sein.
  • Module bieten einen neuen Sichtbarkeits-Geltungsraum (visibility scope). Somit kann die Datenkapselung (information hiding) nun nicht nur auf Klassenebene (private) und Package-Ebene (protected) vorgenommen werden, sondern auch auf Modul-Ebene (export package). Die nebenstehende Grafik stellt dar wie die Zugriffsrechte mit Java 9 aussehen: Innerhalb eines Moduls bleibt alles wie bisher. Neu ist, dass nun nicht mehr alle public Methoden außerhalb eines Moduls sichtbar und verfügbar sind, sondern nur noch die explizit exportierten. Zudem muss vor der Verwendung dieser exportierten Methoden das Modul als required erklärt werden.
  • Der gesamte Code aus allen Artefakten des Classpaths, der bisher nicht in einem expliziten Modul untergebracht ist, wird zu dem unnamed module zugeordnet. Dieses Modul exportiert alle packages, kann jedoch nicht von anderen Modulen required werden. Somit wird verhindert, dass die bisherigen JAR’s nicht mehr ausführbar werden.
  • Aufgrund der Restrukturierung und der Kapselung von vielen sun.* Klassen ist dieses Release nicht uneingeschränkt abwärts kompatibel. Laut Spezifikation sollen alle Anwendungen, die nur die Standard APIs nutzen, weiterhin ohne Änderungen funktionieren (siehe „compatible Java Platform modularization). Die meisten Anwendungen beschränken sich jedoch nicht auf die „Standard API“. Daher sollte man rechtzeitig seine Artefakte auf Kompatibilität mit Java 9 prüfen.

Alle, die bereits jetzt herausfinden wollen, was auf sie zukommt und schon mal reinschnuppern wollen, können sich das Early Access Release herunterladen: https://jdk9.java.net/