Skip to main content
Entwickler Themen
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Java 8 (LTS)

Java 8 wurde im März 2014 veröffentlicht und ist eine LTS-Version (Long-Term Support), die bis heute in vielen Unternehmen im Einsatz ist. Es war ein Meilenstein in der Entwicklung der Sprache, da mit dieser Version erstmals funktionale Programmierkonzepte in Java Einzug hielten.

Wichtige Neuerungen in Java 8

  • Lambda-Ausdrücke
  • Streams API
  • Optional
  • Neue Date/Time API (java.time)
  • Default- und Static-Methoden in Interfaces
  • Wiederholbare Annotationen
  • Nashorn JavaScript Engine
  • Parallel Array Sort

Lambda-Ausdrücke

Lambda-Ausdrücke wurden mit Java 8 eingeführt und ermöglichen eine kompakte Syntax zur Definition von Funktionen, insbesondere für funktionale Interfaces (Interfaces mit genau einer abstrakten Methode).

Beispiel:

List<String> namen = Arrays.asList("Anna", "Bernd", "Claudia");
namen.forEach(name -> System.out.println("Hallo " + name));

Erläuterung:
Statt einer anonymen Klasse wird hier mit name -> ... ein Lambda-Ausdruck verwendet, der für jedes Element in der Liste eine Ausgabe erzeugt. Dies spart Code und verbessert die Lesbarkeit.


Streams

Streams ermöglichen eine deklarative Verarbeitung von Datenkollektionen. Sie erlauben Filter-, Map-, Reduce-Operationen und mehr – oft in Verbindung mit Lambda-Ausdrücken.

Beispiel:

List<String> namen = Arrays.asList("Anna", "Bernd", "Claudia", "Berta");
List<String> mitB = namen.stream()
    .filter(name -> name.startsWith("B"))
    .sorted()
    .toList();

Erläuterung:
Der Code filtert alle Namen, die mit “B” beginnen, sortiert sie alphabetisch und sammelt das Ergebnis in einer neuen Liste. Der Stream erlaubt so eine elegante und funktionale Datenverarbeitung.


Optional

Die Klasse Optional<T> ist ein Container, der entweder einen vorhandenen Wert oder keinen Wert enthalten kann. Dadurch wird der Umgang mit null sicherer und ausdrucksstärker.

Beispiel:

Optional<String> optionalName = Optional.ofNullable(getName());
optionalName.ifPresent(name -> System.out.println("Name: " + name));

Erläuterung:
getName() kann null zurückgeben. Durch Optional.ofNullable() wird das Ergebnis sicher gekapselt. Mit ifPresent() wird die Ausgabe nur durchgeführt, wenn ein Wert vorhanden ist – ohne expliziten null-Check.


Neue Date/Time API (java.time)

Java 8 hat die veralteten Date- und Calendar-Klassen durch ein neues, immutables und thread-sicheres Zeit-API ersetzt.

Beispiel:

LocalDate heute = LocalDate.now();
LocalDate geburtstag = LocalDate.of(1990, Month.APRIL, 4);
Period alter = Period.between(geburtstag, heute);
System.out.println("Alter: " + alter.getYears());

Erläuterung:
Mit LocalDate lassen sich Kalenderdaten einfach und sicher verarbeiten. Period.between() berechnet die Zeitdifferenz zwischen zwei Daten – ideal zur Altersberechnung oder Laufzeitmessung.


Default- und Static-Methoden in Interfaces

Seit Java 8 dürfen Interfaces Methoden mit einer Standardimplementierung (default) enthalten. Außerdem können statische Methoden definiert werden.

Beispiel:

interface Begrüßung {
  default void hallo() {
    System.out.println("Hallo!");
  }

  static void global() {
    System.out.println("Globale Begrüßung");
  }
}

Wiederholbare Annotationen

Java 8 erlaubt es, dieselbe Annotation mehrfach an einem Ziel zu verwenden. Dazu wird die Annotation mit @Repeatable markiert.

Beispiel:

@Hint("A")
@Hint("B")
class MyClass {}

@Repeatable(Hints.class)
@interface Hint {
  String value();
}

@interface Hints {
  Hint[] value();
}

Nashorn JavaScript Engine

Java 8 brachte die neue JavaScript-Engine Nashorn mit, die es erlaubt, JavaScript direkt innerhalb von Java auszuführen.

Beispiel:

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval("print('Hallo aus JavaScript');");

Hinweis: Nashorn wurde in Java 15 entfernt.


Parallel Array Sort

Mit Java 8 wurde Arrays.parallelSort() eingeführt, das große Arrays schneller sortieren kann, indem es parallele Threads nutzt.

Beispiel:

int[] zahlen = {5, 3, 8, 1, 9};
Arrays.parallelSort(zahlen);
System.out.println(Arrays.toString(zahlen));