11 Gründe

Darum bleibt Java relevant

19.01.2024
Von 
Peter Wayner schreibt unter anderem für unsere US-Schwesterpublikation InfoWorld.com und ist Autor verschiedener Bücher - unter anderem zu den Themen Open Source Software, autonomes Fahren und digitale Transaktionen.

5. Pattern Matching mit Switch

Die Java-Verantwortlichen haben die Sprache allerdings auch auf unterster syntaktischer Ebene optimiert, um Entwickler zu einer saubereren, ausdrucksstarken Logik zu führen. Dabei unterstützt das Keyword switch (mit dem Stacks von if-then-else-Konditionalen kreiert werden können) jetzt auch Pattern Matching. Das hat zur Folge, dass die Logik, um verschiedene Cases zu spezifizieren, nicht auf grundlegende Expressions wie equals beschränkt ist.

Java-Code, der mit diesen Mustern geschrieben wurde, ist besonders prägnant und zudem in der Lage, nicht nur nach dem Value innerhalb der Daten, sondern auch nach Objekttyp zu differenzieren. Dazu können alle Referenztypen und der Null Pointer verwendet werden. Selbstverständlich wird die traditionelle Logik mit Fall-Through-Semantik weiterhin unterstützt - alter Code läuft also auch weiterhin reibungslos.

6. Vereinheitlichte Syntax

Obwohl Java im Kern eine tiefe Verwandtschaft mit Lisp aufweist, unterschied sich die Programmierarbeit anfangs nicht wesentlich vom Vorgehen bei C oder C++. Geschweifte Klammern und Semikolons wirkten nahezu identisch, Loops wurden klassisch dreiteilig strukturiert.

Inzwischen sind allerdings Ergänzungen neuerer Skriptsprachen wie Das hat allerdings auch dazu geführt, dass sich Java seit seinen Anfangszeiten dramatisch verändert hat - im Wesentlichen zum Besseren. Im Folgenden haben wir elf Gründe zusammengetragen, die dafür sprechen, dass Java auch in Zukunft relevant bleibt. und Python eingeflossen: For-Loops etwa müssen nicht mehr bis ins kleinste Detail beschrieben werden, weil der Compiler sie intuitiv erkennt, sobald sie eine Liste oder ein Array durchlaufen. Anonyme Funktionen und Lambda-Expressions sind weitere Wege für Developer, Tastenanschläge einzusparen.

7. Sealed Classes

Die JVM war von Anfang an darauf ausgelegt, viele gängige Sicherheitslücken zu schließen, die Entwickler (versehentlich) in ihren Programmen hinterlassen könnten. Diese Fähigkeiten wurden inzwischen um zahlreiche weitere Features ergänzt - zum Beispiel Sealed Classes in Java 17. Damit lässt sich genau definieren, welche Klassen erweitert werden dürfen und somit verhindern, dass grundlegende Funktionen von Dritten überschrieben werden können.

Sealed Classes bieten gegenüber herkömmlichen Klassen zudem Geschwindigkeitsvorteile und ermöglichen eine aggressivere Optimierung und Inlining.

8. Foreign Functions und Memory

Die Java Virtual Machine war ursprünglich als "Walled Garden" oder "Typesafe Sandbox" konzipiert: Sie "bewacht" den Code und verhindert viele Angriffe, die möglich werden, wenn dieser nativ ausgeführt wird. Das ursprüngliche Java Native Interface (JNI) war für viele Entwickler, die auf Bibliotheken und Stacks zugreifen mussten, die in anderen Sprachen geschrieben waren, eine Art Hintertür.

Inzwischen gibt es die Foreign Function & Memory API (derzeit in der dritten Preview). Diese Schnittstelle gestaltet es erheblich einfacher und sicherer, externe Verbindungen herzustellen. Dazu kommen verbesserte Schutzmechanismen wie Type Checking, um potenzielle Overflow-Angriffe zu verhindern. Diese API kann dafür sorgen, dass Java künftig auch vermehrt für Low-Level- und Data-Processing-Aufgaben zum Einsatz kommt. Und sie bietet Programmierern einen sichereren Weg, aus der Sandbox auszubrechen.

9. Vector API

Die ursprüngliche Vector-Klasse war mehr eine Datenstruktur als ein mathematisches Tool - eine flexible und synchronisierte Lösung, um Objekte zu speichern, die sich nicht wesentlich von List unterschied. Ganz anders die neue Vector API: Sie ist ein Werkzeug für mathematische Datenverarbeitung, die im KI-Zeitalter immer häufiger relevant wird. Bei den einzelnen Elementen kann es sich um primitive Typen handeln. Viele grundlegende mathematische Operationen wie Dot Products werden unterstützt.

Der Unterschied zwischen der Vectorwerden dabei automatisch erstellt. Unterdessen sorgt die JVM für die Unveränderlichkeit deradd-Methode: In der Original-Klasse wird einfach ein Objekt ans Ende der Datenstruktur angehängt, wie bei allen anderen Collections-Klassen auch. In der API wird sie verwendet, um die einzelnen Elemente mathematisch zu addieren. Die Vector API verspricht zudem, die enorme Rechenleistung einiger neuerer SIMD-Prozessoren zu erschließen und Java-Programmierer in die Lage zu versetzen, Code zu erstellen, der viele lange Vektoren durchlaufen kann.

10. Besseres Null Processing

ist die Default-Option, die einen optimierten Durchsatz mit kürzeren Pausen bietet. G1 baut auf Techniken auf, die aus früheren Iterationen der Java-Garbage-Collection entstanden sind.

Die Stream API kann beispielsweise lange Datenströme verarbeiten und bleibt nicht hängen, wenn gelegentlich ein Nullwert auftaucht. Devs die trotzdem prüfen wollen, nutzen den Null-Safe-Operator (?.), der das auf sehr prägnante Art und Weise erledigt.

11. Keine Kosten - zumindest für Devs

Java war - zumindest für Softwareentwickler - schon immer kostenlos. Sun Microsystems wusste die Devs zu locken und unternahem 1997 den mutigen Schritt, Teile der Sprache und die JVM als quelloffene Software anzubieten.

Seitdem Sun im Jahr 2010 von Oracle geschluckt wurde, gestaltet sich das Lizenzgebahren etwas undurchsichtiger. Viele Java-Versionen von Oracle sind kostenlos, einige erfordern aber Lizenzen mit bemerkenswerten Bedingungen. Scheinbar versucht das Unternehmen Programmierern weiterhin kostenlosen Zugang zu ermöglichen, während Unternehmen, die vom Einsatz von Java finanziell profitieren, zahlen sollen. In der Praxis bedeutet das, dass Oracle für die sogenannten " werden. Jede der vier GC-Optionen bietet zudem weitere Möglichkeiten zum Feintuning und für Experimente.5. Pattern Matching mit Switch

Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation Infoworld.