Mit Java 8 ist die Programmiersprache Java um zahlreiche Sprachmittel erweitert worden. Dazu gehören Lambda-Ausdrücke und Methoden-Referenzen, aber auch Default-Methoden in Interfaces. Die neuen Sprachmittel verändern den Stil, in dem Java-Entwickler programmieren, denn sie unterstützen Programmiertechniken, die bislang in Java nicht möglich waren. Die Lambdas und Methoden-Referenzen ermöglichen Techniken, wie sie aus der funktionalen Programmierung bekannt sind. Über Default-Methoden wird Mehrfachvererbung in Java unterstützt; damit werden Programmtechniken wie Traits und Mixins möglich.
Zusätzlich zur Sprache sind zentrale Abstraktionen des JDK wie die Collections umfangreich überarbeitet worden. Sie bieten seit Java 8 funktionale Schnittstellen für Zugriffe auf Elemente einer Collection über sogenannte Streams. Die Streams ermöglichen sowohl sequentiellen als auch hochperformanten parallelen Zugriff auf die Elemente einer Collection. Letzteres ist insbesondere für Applikationen auf Multicore- und Multi-CPU-Architekturen von Bedeutung, da es sehr bequem eine feingranulare Parallelisierung ermöglicht.
Die Benutzung der Streams ist ohne die neuen Sprachkonstrukte undenkbar. Performantes paralleles Programmieren ist ohne die Streams schwer vorstellbar. Dieses Seminar bietet Java-Programmierern die Möglichkeit, die Sprachneuerungen inkl. neuer Programmiertechniken zu erlernen, das umfangreiche Stream-API kennen zu lernen, das komplexe Performance-Modell der parallelen Streams zu verstehen und den Stream-Framework zu erweitern um benutzer-definierte Streams und eigene Kollektoren.
Neben den Streams ist für Java 8 ein neues Date/Time API frei gegeben worden. Es löst alte Klassen wie Date, Calendar, etc. ab und ist außerdem ein instruktives Beispiel für ein modernes API-Design mit Designprinzipien wie Fluent Programming und Immutability.
Mit Java 9 hat die Sprache ein Modulkonzept bekommen, das JPMS (Java Platform Module System). Der JDK ist bereits modularisiert und mit Java 9 soll eine Transitionsphase beginnen, in der allmählich alle Java-Anwendungen, -bibliotheken und -Frameworks modular werden sollen. Wir schauen uns an, wie Module beschrieben werden, wie die Migrationsstrategien aussehen können, welche Probleme sich beim Umstieg auf Java 9 wegen der Modularisierung auftreten können und wie man die Probleme löst.
Mit Java 10 ist das var-Schlüsselwort und damit die automatische Typdeduktion für lokale Variablen als Sprachmittel hinzu gekommen. Geschickt verwendet lässt sich damit der Source-Code übersichtlicher gestalten.
Mit Java 12 ist das Sprachmitter der switch-Anweisungen überarbeitet worden. Es gibt neue Arten von case-Labels, eine neue Form von break-Anweisung mit Returnwert und switch-Ausdrücke als Alternative zu manchen switch-Anweisungen.
Das Seminar gibt einen Überblick über die wesentlichen Neuerungen von Java 8 bis heute, soweit sie die Sprache Java und den Kern des JDK betreffen. Es werden die Prinzipien der funktionalen Programmierung am Beispiel der Benutzung von Lambdas und Streams besprochen. Wir befassen uns im Detail um Performance-Überlegungen im Zusammenhang mit parallelen Streams und auch mit den Fallstricken in der Benutzung der parallelen Streams. Im Zusammenhang mit dem Modulsystem sehen wir uns nicht nur das Modulsystem selbst an, sondern auch mögliche Probleme, die beim Umstieg auf Java 9 wegen dem Modulsystem auftreten können.
In zahlreichen praktischen Übungen erhält jeder Teilnehmer die Gelegenheit, die vorgestellten Sprachmittel und APIs auszuprobieren und zu verinnerlichen.
Das Wissen nehmen Sie mit
Als Teilnehmer erhalten Sie den Link zum E-Book „Lambda Expressions in Java“ von Angelika Langer & Klaus Kreft, um nach dem Seminar weitere Themen nachzuschlagen und Ihr Wissen zu vertiefen.
Ihre Trainerin
Angelika Langer arbeitet als unabhängige Trainerin mit eigenem Kursprogramm basierend auf ca. 25 Jahren Erfahrung in der Softwareentwicklung, u.a. in C++ und Java. Sie ist Autorin zahlreicher Fachveröffentlichungen zum Thema Java und C++, darunter die Kolumne „Effective Java“ im JavaMagazin, das Online Java Generics FAQ, sowie das Buch „Standard C++ IOStreams“. Sie ist Referentin auf internationalen Fachkonferenzen im In- und Ausland. Aktuell liegt ihr Hauptinteresse im Training, Coaching und Mentoring im Bereich der objektorientierten Softwareentwicklung mit C++ und Java.
Inhalt
Neue Sprachmittel in Java 8
- Lambda-Ausdrücke & Methoden-Referenzen
- Funktionale Interfaces und Typinferenz
- Default- und statische Methoden in Interfaces
Stream-API
- ForEach-Filter-Map-Reduce
- Fluent Programming
- flatMap() & Mapper
- collect() & Collectoren
Stream Internals
- Terminale und verzögerte Operationen
- Non-Interference-Anforderung
- Operationen mit/ohne Zustand
- Sequentielle und parallele Ausführung
Date/Time API
- Continuous Time vs. Human Time
- LocalDateTime vs. Human Time
- Parsing & Formatting
The Java Platform Module System (JPMS)
- Moduldeskriptoren
- Named, Unnamed und Automatic Modules
- Migrationsstrategien
Voraussetzungen
Sie sind vertraut mit den Sprachmitteln von Java 6 oder 7 und haben praktische Erfahrung im Einsatz von Java.