Technischer Projektleiter
Java News: Was sind die besten Verbesserungen, die die Updates für die neuen Versionen SE 8 – SE 17 bringen?
Die Programmiersprache Java wird regelmäßig aktualisiert, was verschiedene Änderungen mit sich bringt. Einige sind bedeutend, andere weniger. Die Liste kann ziemlich lang sein, deshalb haben wir nur die wichtigsten aus jeder Version ausgewählt.
Die zweitmeistgenutzte Programmiersprache ist Java.
Java ist eine der beliebtesten Programmiersprachen. Sie ist vielseitig, stabil und objektorientiert und hat eine lange Geschichte. Er wurde erstmals im Jahr 1995 vorgestellt. Oracle, das Unternehmen, das Java entwickelt hat, veröffentlichte anfangs neue Hauptversionen alle 3–4 Jahre. Technologien entwickeln sich jedoch ständig weiter, was dazu führte, dass auf einen agilen Veröffentlichungszyklus umgestellt wurde, bei dem alle sechs Monate eine neue Version herausgegeben wird.
Die erste agile Version war Java SE 9, die im September 2017 veröffentlicht wurde. Version 10 erschien dann sechs Monate später. Die nachfolgenden Updates wurden in ähnlichen Intervallen veröffentlicht.
Die beliebteste ist Java 11
Java 11 war laut der jährlichen Umfrage von Snyk im Jahr 2021 die am häufigsten verwendete Version. Sie wurde von bis zu 61,5 % der Befragten verwendet. Nur 12 % der Befragten hatten die Programmiersprache auf die neueste Version aktualisiert, die zum Zeitpunkt der Umfrage Java 15 war.
Interessant waren auch die Antworten auf die Frage nach den Gründen, warum die Leute nicht auf eine neuere Version umgestiegen sind. Die Mehrheit stimmte darin überein, dass sie nicht in der Lage oder bereit ist, Java alle 6 Monate zu migrieren. Andere, etwa 51 %, behaupten, dass sie keine Veränderungen brauchen, weil ihre aktuelle Umgebung gut funktioniert.
Weitere Gründe, warum die Umfrageteilnehmer bei älteren Versionen bleiben, sind:
- hohe Migrationskosten
- die Unwilligkeit der Kunden zu migrieren
- die neue Version bietet keine besonderen Verbesserungen,
- die Anwendungsserver oder Bibliotheken unterstützen nicht die neuesten Versionen
Aus der Umfrage von 2020 ging hervor, dass die Strategie der Mehrheit der Entwickler (55 %) darin besteht, sich an langfristige Releases zu halten. Trotzdem geben bis zu 22 % der Befragten an, dass sie planen zu entscheiden, ob sie upgraden werden oder nicht. Sie möchten herausfinden, ob die neu eingeführten Funktionen wichtig genug sind, um die Migration zu rechtfertigen.
Die wichtigsten Aktualisierungen in jeder Java-Version
Jede neue Version bringt einige Änderungen mit sich. Einige sind größer, andere kleiner. Wir haben für dich die wichtigsten Änderungen herausgesucht, die für jeden, der Java verwendet, nützlich sein könnten.
Java SE 9
Java SE 9 wurde im September 2017 veröffentlicht und brachte einige Änderungen mit sich. Aber nicht alle von ihnen waren bedeutend und wichtig. Dies sind die drei wichtigsten:
Modularität – Jigsaw Project
Die wichtigste Änderung in der Java 9-Umgebung war das Modularitätssystem, das als Jigsaw-Projekt bezeichnet wurde. Ein Modul ist eine Gruppe von Code, die durch bestimmte Merkmale gekennzeichnet ist. Die Modularitätsfunktion teilt die Programmiersprache in kleinere Module auf, um zu bieten:
- Schattierung,
- Reduzierung von Konflikten zwischen Versionen
- Hinzufügen von Kapselung
- höhere Sicherheit,
- höhere Leistung,
- angepasster JDK-Runtime mit kleinerer Größe
Um ein neues Modul zu erstellen, benötigst du eine module-info.java Datei in deinem src/main/java Verzeichnis. Drinnen kannst du deine Modulanforderungen definieren.
Private Methoden in Java-Schnittstellen
Eine weitere Funktion von Java 9 ermöglicht das Schreiben privater und statischer Methoden in Schnittstellen, um überflüssigen Code zu vermeiden.
Das Java-Kommandozeilen-Tool JShell
Oracle hat ein neues REPL-Tool namens JShell entwickelt. REPL steht für Read – Evaluate – Print – Loop. Wie der Name schon sagt, dient es dazu, Befehle auszuführen, Variablen, Klassen und Methoden zu erstellen und diese schnell zu testen. Es ist hervorragend zum Testen kleiner Code-Snippets geeignet, die ansonsten das Erstellen einer neuen Klasse mit einer main-Methode erfordern würden.
JShell befindet sich im Ordner <JAVA_HOME>/bin und kann durch Eingabe von jshell in der Befehlszeile gestartet werden, um sofort mit dem Schreiben von Code zu beginnen.
Das interaktive Java-Tool JShell wird mit einer Verlaufs-Funktion und automatischer Vervollständigung geliefert. Es bietet auch Funktionen wie das Speichern und Laden von Dateien sowie das Verwalten aller oder einzelner Codezeilen.
Java SE 10
Oracle hat Java SE 10 im März 2018 veröffentlicht. Für Entwickler brachte es zwei wichtige Änderungen:
OpenJDK
Um die Java-Community freundlicher zu gestalten, begann Oracle damit, OpenJDK-Binärdateien als das primäre JDK der Zukunft zu fördern. Das Problem ist jedoch, dass man für erweiterte Unterstützung älterer Java-Versionen zahlen muss.
Die var-Variable
Die var-Variable ist nichts Neues, da sie auch in anderen Programmiersprachen existiert. Ihr Hauptvorteil ist, dass sie die Beredsamkeit der Zunge verringert. In der Praxis bedeutet dies, dass man mit ihrer Hilfe lange Objektnamen vermeiden oder dieselben Namen nicht zweimal schreiben muss.
Programmierer könnten sich jedoch fragen, was der Unterschied zwischen var und Object ist. Das Schlüsselwort var bedeutet, dass du möchtest, dass der Compiler den Typ selbst feststellt. Auf der anderen Seite kannst du mit Object eine Instanz deines Objekts in den Typ Object umwandeln. Das bedeutet, dass du zwar die allgemeinen Methoden der Klasse Object verwenden kannst, aber nicht die spezifischen Methoden deiner spezifischen Klasse. Dies führt zu einem Kompilierungsfehler.
Java SE 11
Java SE 11 wurde sechs Monate nach Version 10 veröffentlicht, also im September 2018. Sie brachte zwei wesentliche Änderungen mit sich:
Ausführen von Java-Dateien
Die wichtigste Änderung in dieser Version ist, dass der Programmierer die ava-Quelldateien nicht mehr explizit mit dem Befehl javac kompilieren muss.
Stattdessen kann die Datei direkt mit dem Befehl java ausgeführt werden
Verwendung der Syntax für lokale Variablen
Java 11 bietet Unterstützung für die Verwendung der Syntax lokaler Variablen in Lambda-Parametern. Die Funktion kann verwendet werden, um Modifikatoren auf lokale Variablen anzuwenden, zum Beispiel zur Definition einer Annotation.
Java SE 12
Die Version 12 wurde im März 2019 veröffentlicht und brachte nur eine signifikante Verbesserung mit sich. Es war die alternative Schreibweise für switch. Das folgende Beispiel vergleicht die alte und die neue Schreibweise von switch. Der Code unterscheidet zwischen Werktagen und Wochenendtagen.
Der Code in der neuen Syntax sieht viel sauberer und kürzer aus. Die neue Switch-Form entfernt auch die Notwendigkeit der Break-Schlüsselwörter. Das bedeutet, dass wenn der Code die erste Übereinstimmung findet, er aufhört zu arbeiten. Ein weiterer Unterschied besteht darin, dass einer Variablen in einer switch-Anweisung direkt ein Wert zugewiesen werden kann.
Java SE 13
Java 13 wurde im September 2019 veröffentlicht. Das Update bringt zwei wichtige Verbesserungen mit sich:
Textblöcke
Die neue Textblockfunktion erleichtert den Entwicklern das Lesen von mehrzeiligem Text. Es verwendet drei Anführungszeichen, ähnlich wie Python und Groovy.
Darüber hinaus sind alle Funktionen der Klasse String verfügbar.
Verbesserungen des switch-Ausdrucks
Java 13 verbessert den switch-Ausdruck aus Version 12 um das Schlüsselwort „yield„. Mit „yield“ können Werte aus einem switch-Ausdruck zurückgegeben werden.
Java SE 14
V im März 2020 wurde Java SE 14 veröffentlicht und brachte sogar vier bedeutendere Verbesserungen mit sich:
Switch als Standard
Der Switch-Ausdruck, der in Java 12 als Preview eingeführt und in Version 13 verbessert wurde, ist mittlerweile ein Sprachstandard.
Verbesserung NullPointerException
NullPointerException hatte in der Vergangenheit nicht besonders viel aussagekräftigen Wert. Der Grund dafür war, dass durch ihn nur festgestellt werden konnte, dass ein bestimmter Wert in einer Datei null war. In der neuen Version ist jedoch alles anders. Die Funktion wurde erweitert und die Programmierer wissen nun endlich, welche Variable die Ausnahme verursacht hat.
Java records
Die Aufzeichnungen wurden eingeführt, um die wiederholte Erstellung von Standardcode in POJO-Datenmodellen zu reduzieren. Sie vereinfachen die alltägliche Entwicklung, erhöhen die Effizienz und minimieren das Risiko menschlicher Fehler erheblich. Zum Beispiel kann ein Datenmodell für einen Benutzer mit einer ID und einem Passwort einfach wie folgt definiert werden:
In diesem Fall wurde auch das neue Schlüsselwort record verwendet, das automatisch Konstruktor, Getter, Equals, HashCode und ToString Methoden hinzufügt.
Musterübereinstimmung für instanceof
Version 14 führte den Mustervergleich ein, umden Code zu vereinfachen. Ohne die neue Funktion würde der Code so aussehen:
Dank der neuen Version von Java sieht der Code jedoch viel einfacher und kürzer aus.
Java SE 15
Java SE 15 wurde im September 2020 veröffentlicht und brachte drei große Updates mit sich:
Textblöcke als Standard
Textblöcke, die als Vorschau in Java 13 eingeführt wurden, sind nun Teil des Sprachstandards geworden.
Sealed Klassen
Die Zugriffsmodifikatoren public, protected und private bieten eine sehr grundlegende Kontrolle. Mit den Schlüsselwörtern sealed, non-sealed und permit kann der Programmierer an der Vererbungshierarchie herumspielen. Das Ziel von versiegelte (sealed) Klassen ist es, einzelnen Klassen die Möglichkeit zu geben, zu deklarieren, welche Typen als Subtypen verwendet werden können. Dies gilt auch für Schnittstellen und die Festlegung, welche Typen sie implementieren können.
In diesem Beispiel haben wir eine abstrakte Klasse namens Person deklariert. Wir haben auch festgelegt, dass die einzigen Klassen, die sie erweitern können, Employee und Manager sind. Das Erweitern einer versiegelte (sealed) Klasse erfolgt auf die gleiche Weise wie heute in Java mit dem Schlüsselwort extends:
Jede Klasse, die eine versiegelte (sealed) Klasse erweitert, muss selbst als sealed, non-sealed oder final deklariert werden. Dadurch wird sichergestellt, dass die Klassenhierarchie endlich bleibt und dem Compiler bekannt ist.
Versteckte Klassen
Das Ziel von Hidden Classes ist es, Klassen zu ermöglichen, die nicht sichtbar sind. Das bedeutet, dass sie nicht von anderen Klassen erweitert werden können und auch nicht durch Reflexion entdeckt werden können. Klassen, wie diese, haben üblicherweise einen kurzen Lebenszyklus, daher sind sie so gestaltet, dass sie vor allem effizient sind. Sie sind besonders nützlich für Entwickler, die mit der JVM arbeiten.
Java SE 16
Version 16 wurde im März 2021 veröffentlicht und brachte eine bedeutende Änderung mit sich: die Migration von OpenJDK zu Git. Die Quellcodes von OpenJDK wurden von Mercurial nach Git migriert. Der Grund dafür waren die Größe der Metadatendateien, bessere Werkzeuge und Hosting-Möglichkeiten.
Java SE 17
Bis März 2022 ist die neueste Version Java 17, die eine neue Rendering-Pipeline für macOS-Systeme, Unterstützung für den neuesten Apple M1-Chip und Unterstützung für versiegelte (sealed) Klassen mit sich brachte. Auch Sprachverbesserungen und die Entfernung der Komplikationen von Ahead-of-Time und Just-in-Time fehlen nicht.
Die besten Erweiterungen für die Programmiersprache Java
Die einzelnen Java-Updates enthalten viele weitere Neuerungen. Nicht alle sind jedoch so groß und wichtig wie die, die wir ausgewählt haben. Mit ihrer Hilfe erhältst du nicht nur saubereren, sondern auch qualitativ hochwertigeren Code sowie eine schnellere und bessere Implementierung. Wenn du alle Neuerungen sehen möchtest, empfehlen wir die folgenden Quellen: