Optional ist ein Container-Objekt, das nicht-null-Objekte aufnehmen kann. Ein Optional-Objekt dient dazu, null durch einen fehlenden Wert darzustellen. Diese Klasse bietet diverse Hilfsmethoden, um Werte als „vorhanden“ oder „nicht vorhanden“ zu behandeln, anstatt explizit auf null zu prüfen. Sie wu
Was ist ein Stream? Ein Stream ist eine Sequenz von Elementen, die aggregate Operationen (filter, map, reduce, …) unterstützt. Anders als Collections: Kein Speicher – Elemente werden on-demand berechnet. Funktional – Operationen verändern Quelle nicht, geben neuen Stream zurück. Pipeline-fähig – In
Motivation Vor Java 8 waren Interfaces rein abstrakt. Neue Methoden (z. B. forEach in Collection) hätten alle existierenden Implementierungen gebrochen. Default Methods lösen dies: Interfaces können Implementierungen bereitstellen, die Implementierer nicht überschreiben müssen. Syntax public interf
Was ist ein Functional Interface? Ein Interface mit genau einer abstrakten Methode (SAM – Single Abstract Method). Kann implizit durch Lambda/Method Reference implementiert werden. Annotation @FunctionalInterface sichert dies compile-time ab. Die 43 Standard-Functional-Interfaces in java.util.funct
Was sind Method References? Ein Method Reference (::) ist eine kompakte Schreibweise für Lambdas, die nur eine existierende Methode aufrufen. Statt System.out.println(x) schreiben Sie System.out::println. Vier Arten von Method References Art Syntax Beispiel Entspricht Lambda Static Method K
Was sind Lambda Expressions? Lambda Expressions (JSR 335) ermöglichen funktionale Programmierung in Java: Verhalten als Daten weiterreichen, ohne anonyme Klassen-Boilerplate. Ein Lambda implementiert ein Functional Interface (Interface mit genau einer abstrakten Methode). Syntax { anweisungen; ret
Lokale Installation JDK 8 herunterladen: Oracle JDK 8 Archive (Login nötig) oder Eclipse Temurin (OpenJDK 8) – empfohlen für Production. Installieren: OS-spezifischen Installer/Archiv ausführen. Umgebungsvariablen setzen: JAVA_HOME, PATH erweitern. Windows (10/11) „Dieser PC“ → Eigenschaften → E
Java 8 – Meilenstein-Release (März 2014) Java 8 ist das bedeutendste Release seit Java 5. Es bringt funktionale Programmierung auf die JVM, moderne APIs für Datum/Zeit, Streams für deklarative Datenverarbeitung und einen neuen JavaScript-Engine. Kernfeatures Feature Beschreibung Lambda Expre
Überblick CompletableFuture<T> (Java 8) repräsentiert einen asynchronen Berechnungswert. Java 9 fügt drei wichtige Erweiterungen hinzu: Unterstützung für Delays & Timeouts. Verbessertes Subclassing. Neue Factory-Methoden. 1. Delays & Timeouts completeOnTimeout(T value, long timeout
Was ist die Multi-Resolution Image API? Java 9 führt java.awt.image.MultiResolutionImage (Interface) und BaseMultiResolutionImage (Basis-Implementierung) ein. Sie ermöglichen, ein logisches Bild darzustellen, das physisch aus mehreren Auflösungsvarianten besteht. Die Laufzeit wählt automatisch die b
Drei neue Methoden für java.util.Optional<T> Java 8 führte Optional ein, um null explizit zu modellieren. Java 9 schließt drei Lücken. 1. stream() – Optional → Stream public Stream<T> stream() Enthält Wert → Stream mit einem Element. Leer → leerer Stream. Ermöglicht nahtlose Integratio
Das Problem vor Java 9 Der Diamond Operator (<>) wurde in Java 7 eingeführt, um redundante Typangaben bei Generics zu vermeiden: List<String> list = new ArrayList<>(); // OK in Java 7 Aber: Bei anonymen inneren Klassen war er verboten – der Compiler konnte den Typ nicht inferieren.
Hintergrund @Deprecated existiert seit Java 5, war aber ein reiner Marker ohne Metadaten. Java 9 fügt zwei optionale Attribute hinzu: forRemoval() – boolean, Default false. true = Element ist für Entfernung in einem zukünftigen Release geplant. since() – String, Default . Version, in der das Eleme
Die Verbesserung Java 7 führte try-with-resources ein, aber die Ressource musste innerhalb der try(...) Klammern neu deklariert werden (oder eine frische Variable zugewiesen werden). Java 9 erlaubt: Effektiv-finale Variablen (bereits initialisiert, nicht mehr geändert) direkt in try(...) zu verwende
Neue Stream-Methoden in Java 9 Die Stream-API erhält vier mächtige Erweiterungen für flexiblere Datenverarbeitung. 1. takeWhile(Predicate) Nimmt Elemente aus dem Stream, solange das Prädikat true liefert. Bei geordneten Streams: längster Präfix. Bei ungeordneten: beliebiges Subset. !s.isEmpty())
Überblick Java 9 erweitert die Process API (java.lang.Process, java.lang.ProcessHandle) massiv. Endlich gibt es plattformunabhängigen Zugriff auf native Prozessinformationen & -steuerung. Neue Klasse: ProcessHandle Repräsentiert einen laufenden OS-Prozess (nicht nur Kind-Prozesse der JVM). Wic
Entwicklung der Interfaces Version Erlaubte Mitglieder ≤ Java 7 Konstanten, abstract Methoden Java 8 + default Methoden, static Methoden Java 9 + private Methoden, private static Methoden Motivation default Methoden ermöglichen Implementierungen in Interfaces, führen aber oft zu Code-
Das Problem vor Java 9 Unveränderliche Collections erforderten viel Boilerplate: List<String> list = new ArrayList<>(); list.add(A); list.add(B); list.add(C); list = Collections.unmodifiableList(list); Java 9 Lösung: Statische Factory-Methoden Die Interfaces List, Set, Map erhalten of()
Was ist ein Multi-Release JAR? Ein Multi-Release JAR (MRJAR) ermöglicht, verschiedene Versionen derselben Klasse für unterschiedliche Java-Laufzeitversionen in einem JAR zu bündeln. Die JVM lädt zur Laufzeit automatisch die passende Version. Struktur mein-mrjar.jar ├── META-INF/ │ ├── MANIFEST.MF
Neu in Java 9: HTML5 Output Der javadoc-Generator produzierte bis Java 8 HTML 4.01. Ab Java 9 erzeugt die Option -html5 valides, modernes HTML5 mit semantischen Elementen (<header>, <nav>, <section>, <article>) und integrierter Suchfunktion (Client-seitig, JavaScript-basiert)
Java