Java produziert alle sechs Monate ein neues Feature. Release Teams, die mit dieser schnellen Entwicklung nicht Schritthalten, riskieren mit unzeitgemäßer Technologie zu arbeiten und sehen sich oft gezwungen, um Defizite herum zu programmieren, die durch moderneres Java bereits gelöst wurden. In diesem Kurs zeigen wir die wichtigsten Features von Java 9 bis Java 17.
Dieser Kurs ist ideal auf professionelle Java-Entwickler:innen abgestimmt. Voraussetzung sind min. zwei Jahre Erfahrung in der professionellen Java-Entwicklung.
Während des Trainings werden Sie immer wieder die Chance erhalten, die Inhalte in gut durchdachten Übungen auszuprobieren. Das wird dabei helfen, das Gehörte besser zu verstehen und das Gelernte zu verinnerlichen.
Hier lernen Sie von dem Besten. Im Java nach 8+/17 Kurs treffen Sie auf Java Champion Dr. Heinz Kabutz, der Sie mit seiner jahrelangen Erfahrung unterstützt.
Wir beginnen mit den Verbesserungen im Bereich der Datenkapselung, wobei hierbei die meiste Zeit das Java Plattform Module System (JPMS) angewendet wird. Wir sondieren, wie das JPMS genutzt werden kann, um unsere eigenen Applikationen und Bibliotheken zu modularisieren. Wir zeigen auf, wie die module-info.java-Datei für bessere Datenkapselung und sauberere Interfaces zwischen Modulen sorgen kann und schauen uns abschließend an, wieviel strenger die Deprecation ist und wie JAR-Dateien, die mehrere Java-Versionen unterstützen, erstellt werden können.
Als Nächstes werden die Performanceverbesserungen in Java 11 in den Fokus gerückt, indem wir uns anschauen, wie Strings verbessert werden, Garbage Collection und den Java Flight Recorder betrachten, sowie darauf eingehen, wie JDK Mission Control zur Analyse von Performance Bugs verwendet werden kann.
Anschließend werfen wir einen Blick auf ein paar Verbesserungen der Programmiersprache, insbesondere das neue var-Konstrukt und die Frage wie und wann es zu verwenden ist. Danach beschäftigen wir uns mit vielen kleinen Veränderungen der Sprache, die das Coding bequemer gestalten.
Im nächsten Schritt werden einige Ergänzungen zur Nebenläufigkeit betrachtet, zum Beispiel wie VarHandles, ähnlich wie Atomic Field References in der Vergangenheit, zum automatischen Updaten von Feldern genutzt werden können. Es wird außerdem gezeigt, wie Sie von VarHandles eine ähnlich gute Performance wie von sun.misc. Unsafe erhalten können. Zum Schluss Abschnitts werden wir einige neue Nebenläufigkeitsverbesserungen besprechen.
Wir beenden unsere Exkursion in die Welt von Java 11 mit einer Betrachtung der Verbesserung und Neuerungen im Bereich der Tools und APIs. Den Anfang machen die Collection Factory Methods, die es ermöglichen, unveränderbare List-, Set- und Map-Instanzen zu erzeugen. Wir verbringen einige Zeit damit etwas über den HttpClient und die drei Arten der Kommunikation zu lernen: synchrone, asynchrone und reaktive. Wir lernen, wie man ein Single-file Java-Programm launchen kann, ohne vorher die Klassen kompilieren zu müssen und wie JShell als Java REPL fungiert. Außerdem erfahren wir mehr über das neue Unified Logging, das uns Einsichten darüber gibt, wie die JVM läuft. Als letzte Themen werden das neue StackWalkerAPI, das es uns ermöglicht mehr Informationen darüber zu erhalten, welche Methoden sich auf unserem Stack befinden, und der neue ObjectInputFilter, der Serialisierung sicherer machen soll, besprochen.
• JEP 261: Modulsystem
o Impedanzmissverhältnis zwischen der JVM und uns
o Geschichte und Ziele des Projekt Jigsaw
o Grundlagen des Java Modulsystems
Lesbarkeit, Zugänglichkeit, starke Datenkapselung, Use Cases
Kein Modul, ein einzelnes Modul oder mehrere Module verwenden
o Über die Grundlagen hinaus
Transitive Abhängigkeiten
Optionale Abhängigkeiten
Services
Qualified Exports
Deep Reflective Access
o Herausforderungen bei der Migration
Interne APIs
JEE Module
Split Packages
Runtime Images
o Inkrementelle Modularisierung
Das Unnamed Module
Automatische Module
Modularisierungsstrategien
o Fazit
• JEP 260: Datenkapselung der internsten APIs
o Teil des Abschnitts JEP 261
• JEP 277: Verbesserte Deprecation
o @since, @forRemoval
o Wie kann Deprecation in Zukunft berücksichtigt werden?
• JEP 238: Multi-Release JAR-Dateien
o Unterstützung verschiedener Java-Versionen
• JEP 254: Compact Strings
o byte[] ersetzt char[]
o Der Effekt auf non-LATIN1 Strings
o Deduplication
o intern()
• JEP 280: String-Verkettungen anzeigen
o Schnelles Hinzufügen von gemischten Typen in verschiedenen Java-Versionen
o invokedynamic und String +
• JEP 328: Flight Recorder
o Starten und Überprüfen des Java Flight Recorder
o Eigene Events erstellen
o Ergebnisse in JDK Mission Control betrachten und analysieren
• JEP 248: G1 zum Standard-Garbage-Collector machen
o Übersicht über die Garbage Collectors: Serial, Throughput, CMS (deprecated), G1, ZGC, Shenandoah
o Arten von Problemen mit GCs, die sich auf Durchsatz und Latenzzeit auswirken
o Protokollierung der Garbage-Collector-Aktivität
• JEP 318: Epsilon: Ein experimenteller No-Op Garbage Collector
o Beschreibung des No-Op GC
o Anwendungsfälle für das Nichterfassen
• JEP 286: Local-Variable Type Inference
o Type Duplication, Locality
o Verwendung von „var“
o Stilistische Richtlinien
Variablenname verwenden, die nützliche Informationen liefern
Den Scope lokaler Variablen minimieren
var berücksichtigen, wenn der Initializer dem Reader genug Informationen zur Verfügung stellt
Nutzung von var um verkettete oder verschachtelte Ausdrücke aufzulösen
Machen Sie sich nicht zu viele Gedanken über die „Programmierung für die Schnittstelle“
Vorsicht bei der Verwendung von var mit Diamonds oder Generics
Vorsicht bei der Verwendung von var mit Literalen
• JEP 323: Local-Variable Syntax für Lambda Parameter
o Einheitlichkeit und Anmerkungen
• JEP 213: Milling Project Coin
o Private Interface Methods
o Effectively Final Variables die mit try-with-resource verwendet werden können
o Diamond-Operatoren mit Anonymous Types
o @SafeVarargs
o Entfernung des Unterstrichs _ als Identifikator
• JEP 193: Variable Handles
o MethodHandles.Lookup
o MethodHandles.privateLookupIn()
o Compare-and-swap (CAS) und nicht-blockierende Algorithmen
o Best Practices
• JEP 266: Noch mehr Updates zur Nebenläufigkeit
o (Sehr) Schnelle Einführung zu Reactive Streams
o CompletableFuture-Erweiterungen
• JEP 269: Convenience Factory Methods for Collections
o List.of(), Set.of(), Map.of()
o Echte Unveränderbarkeit
o Was ist mit Arrays.asList()?
• JEP 321: HTTP Client
o HttpClient, HttpRequest, HttpResponse
o Erstellung von HttpClient and HttpRequest durch Builders
o Asynchroner Aufruf, der CompletableFuture zurückgibt
o Reaktive Aufrufe und Response Bodies
• JEP 330: Inbetriebnahme von Single-File-Quellcode-Programmen
o ClassLoader Fallstricke
• JEP 158: Vereinheitlichtes JVM-Logging
o Tags, Levels, Output, Dekorierer
o Das Logging für jcmd konfigurieren
• JEP 222: jshell: Die Java Shell (Read-Eval-Print Loop)
o Java REPL
o Standardimporte
o Semikolons
o Autokomplettierung
o Praktische Nutzung
• JEP 259: Stack-Walking API
o Effiziente Standardmethode zum Durchlaufen des Aufrufstapels
o Zusätzliche Informationen über Klassen und Methoden
• JEP 290: Eingehende Serialisierungsdaten filtern
o ALLOWED, REJECTED, UNDECIDED
o Globale Filter
o Filtern mit String Pattern
Zusammenfassung
• Wohin als nächstes?
• Nach Java 17
• Der Java Spezialisten Newsletter
anker
Wir beginnen mit den Sprachverbesserungen, zeigen auf wie NullPointerExceptions uns mit hilfreichen Informationen zum Debugging versorgen und wenden uns anschließend neuen Features wie Switch Expressions, Textblöcken, Pattern Matching für instanceof, Records und auch Sealed Classes zu.
Im nächsten Schritt betrachten wir die Performanceverbesserungen in Java 17, schauen uns an warum Biased Locking als Voreinstellung deaktiviert ist, was eine wertbasierte Klasse ist und stellen die beiden neuen Garbage Collectors ZGC und Shenandoah vor.
Im letzten Abschnitt nehmen wir die Tool- und API-Weiterentwicklungen in den Blick, beispielsweise die verbesserten Pseudozufallszahlengeneratoren, die kontextspezifischen Filter zur Deserialisierung und zeigen wie die JVM durch stärkere und das Verwerfen des unsicheren Security Managers an Sicherheit gewinnt.
Während des Trainings werden wir immer die Chance erhalten, die Inhalte in gut durchdachten Übungen auszuprobieren. Das wird dabei helfen, das Gehörte besser zu verstehen und das Gelernte zu verinnerlichen.
• JEP 358: Nützliche NullPointerExceptions
• JEP 361: Switch Expressions
• JEP 378: Textblöcke
• JEP 394: Pattern Matching für instanceof
• JEP 395: Records
• JEP 409: Sealed Classes
• JEP 374: Biased Locking verwerfen und diaktivieren
• JEP 377: ZGC: Ein skalierbarer Garbage Collector mit geringer Latenz
• JEP 379: Shenandoah: Ein Low-Pause-Time Garbage Collector
• JEP 390: Warnungen für wertbasierte Klassen
• JEP 356: Erweiterte Pseudozufallszahlengeneratoren
• JEP 403: JDK Internals stark einkapseln
• JEP 411: Den Security Manager verwerfen und zur Löschung freigeben
• JEP 415: Kontextspezifische Deserialisierungsfilter
Zusammenfassung
• Wohin als nächstes?
• Nach Java 17
• Der Java Spezialisten Newsletter