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.

Neue Versionen der Programmiersprache Java von Oracle
Übersicht der Java-Versionen, Quelle: wikipedia.org

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.

Code für private und statische Methoden in Java 9
Die Version Java 9 enthält die Möglichkeit, private und statische Methoden in Interfaces zu definieren.

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.

JShell-Befehlszeilencode in Java SE 9
Das Java-Kommandozeilen-Tool JShell ist hervorragend zum Testen kleiner Code-Snippets geeignet.

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.

Autovervollständigung und Historie der interaktiven Java JShell
Ein neues REPL-Tool namens JShell ermöglicht das Speichern und Laden von Dateien und 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.

Code zur Ausführung von Java-Dateien ohne Kompilierung der Quelldateien
In Java 11 musst du ava-Quelldateien nicht mehr explizit mit dem Befehl javac kompilieren.

Stattdessen kann die Datei direkt mit dem Befehl java ausgeführt werden

Direktes Ausführen von Java-Dateien in SE 11
Direktes Ausführen von Java-Dateien in Version SE 11.

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.

Code - Verwendung der Syntax für lokale Variablen in Java SE 11
Java SE 11 erlaubt die Verwendung der Syntax für lokale Variablen in Lambda-Parametern.

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.

Code - Die alte Switch-Syntax in Java SE 12
Java 12 hat die alte Switch-Notation verbessert.
Code - Alternative Switch-Syntax in Java 12
Java SE 12 hat eine neue alternative Syntax für den Switch-Ausdruck eingeführt.

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.

Code - Neue Textblockfunktion in Java SE 13
Java 13 führt eine neue Textblockfunktion ein, die wie Python und Groovy drei Anführungszeichen verwendet.

Darüber hinaus sind alle Funktionen der Klasse String verfügbar.

Code - Funktionen der Klasse String in Java SE 13
In Java SE 13 stehen dir auch alle Funktionen der String-Klasse zur Verfügung.

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.

Code - Verbesserter Switch-Ausdruck von Version 12 in Java SE 13
Java SE 13 bietet eine verbesserte Version des Switch-Ausdrucks aus Version 12 an.

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.

Code - Switch als Sprachstandard in Java SE 14
Java SE 14 hat den ursprünglichen Switch-Ausdruck zum Sprachstandard in der Programmierung gemacht.

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:

Code - Neue Records-Funktion in Java SE 14
Mit Java 14 wurden POJO-Datensätze eingeführt, um den sich wiederholenden Standardcode in Datenmodellen zu reduzieren.

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:

Code - Mustervergleich mit der Funktion instanceof in Java 14
Der alte Ansatz zur Verwendung der instanceof-Funktion zur Musterabgleichung war komplex.

Dank der neuen Version von Java sieht der Code jedoch viel einfacher und kürzer aus.

Code - Verbesserte instanceof-Funktion in Java 14
Eine neue Funktion von Java 14 hat das Schreiben des instanceof-Ausdrucks vereinfacht.

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.

Code - Vererbungshierarchie mit versiegelte (sealed) Klassen
Versiegelte (sealed) Klassen ermöglichen die Deklaration von Typen, die in jeder Klasse als Subtypen definiert werden 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:

Code - Versiegelte Klassenerweiterung in Java SE 15
Verwende extends, um versiegelte (sealed) Klassen in der aktuellen Version von Java und in SE 15 zu erweitern.

 

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:

Über den Autor

Jozef Wagner

Java Developer Senior

Viac ako 10 rokov programujem v Jave, momentálne pracujem v msg life Slovakia ako Java programátor senior a pomáham zákazníkom implementovať ich požiadavky do poistného softvéru Life Factory. Vo voľnom čase si rád oddýchnem v lese, prípadne si zahrám nejakú dobrú počítačovú hru.

Informieren Sie uns über sich