Java 10 - Neue Funktionen

Hallo, ambitionierte Java-Entwickler! Ich freue mich sehr, Ihnen die aufregenden neuen Funktionen in Java 10 vorzustellen. Als jemand, der seit vielen Jahren Java unterrichtet, kann ich Ihnen versichern, dass diese Updates Ihre Programmierreise noch angenehmer und effizienter machen werden. Lassen Sie uns eintauchen!

Java 10 - New Features

Einführung in Java 10

Java 10 wurde im März 2018 veröffentlicht und bringt mehrere Verbesserungen in die Sprache. Während es möglicherweise nicht so bahnbrechend wie einige andere Versionen ist, hat es einige nützliche Funktionen eingeführt, die Ihre Programmiererfahrung erheblich verbessern können.

Lokale Variablen-Typ-Inferenz

Eine der am meisten diskutierten Funktionen in Java 10 ist die lokale Variablen-Typ-Inferenz. Diese Funktion ermöglicht es Ihnen, lokale Variablen ohne explizite Angabe ihres Typs zu deklarieren. Stattdessen können Sie das var-Schlüsselwort verwenden, und der Compiler wird den Typ basierend auf dem Initialisierer ableiten.

Schauen wir uns ein Beispiel an:

// Vor Java 10
String nachricht = "Hallo, Java 10!";

// Mit Java 10
var nachricht = "Hallo, Java 10!";

In diesem Beispiel inferiert der Compiler automatisch, dass nachricht ein String ist. Diese Funktion kann Ihren Code kürzer und lesbarer machen, insbesondere bei Umgang mit komplexen Typen.

Wann var verwenden

Obwohl var eine leistungsstarke Funktion ist, sollte es mit Bedacht verwendet werden. Hier sind einige Richtlinien:

  1. Verwenden Sie var, wenn der Typ aus der rechten Seite der Zuweisung offensichtlich ist.
  2. Vermeiden Sie die Verwendung von var, wenn der Typ nicht klar ist, da dies die Lesbarkeit des Codes verringern kann.

Schauen wir uns ein komplexeres Beispiel an:

// Vor Java 10
Map<String, List<String>> benutzerFruits = new HashMap<>();

// Mit Java 10
var benutzerFruits = new HashMap<String, List<String>>();

In diesem Fall macht die Verwendung von var den Code cleaner, ohne die Klarheit zu opfern.

Erweiterte APIs

Java 10 hat auch einige Verbesserungen an bestehenden APIs vorgestellt. Lassen Sie uns einige davon erkunden.

Optional.orElseThrow()

Die Optional-Klasse, die in Java 8 eingeführt wurde, bekam in Java 10 eine neue Methode: orElseThrow(). Diese Methode ist ähnlich wie get(), aber sie ist deutlicher in Bezug darauf, eine Ausnahme zu werfen, wenn das Optional leer ist.

public class OptionalBeispiel {
public static void main(String[] args) {
Optional<String> leeresOptional = Optional.empty();

try {
String ergebnis = leeresOptional.orElseThrow();
} catch (NoSuchElementException e) {
System.out.println("Optional war leer!");
}
}
}

In diesem Beispiel wirft orElseThrow() eine NoSuchElementException, weil das Optional leer ist. Diese Methode hilft, Ihren Code ausdrucksstärker und leichter verständlich zu machen.

Unveränderliche Sammlungen

Java 10 führte neue Fabrikmethoden zur Erstellung unveränderlicher Kopien von Sammlungen ein. Diese Methoden sind für List, Set und Map verfügbar.

public class UnveränderlicheSammlungenBeispiel {
public static void main(String[] args) {
List<String> früchte = Arrays.asList("Apfel", "Banane", "Kirsche");
List<String> unveränderlicheFrüchte = List.copyOf(früchte);

try {
unveränderlicheFrüchte.add("Dattel");
} catch (UnsupportedOperationException e) {
System.out.println("Kann eine unveränderliche Liste nicht ändern!");
}
}
}

In diesem Beispiel erstellt List.copyOf() eine unveränderliche Kopie der ursprünglichen Liste. Jeglicher Versuch, diese Liste zu ändern, führt zu einer UnsupportedOperationException.

Leistungsoptimierungen

Java 10 brachte auch einige unter der Haube liegende Optimierungen, die die Leistung verbessern.

Paralleler voller GC für G1

Der Garbage-First (G1)垃圾回收器, der in Java 9 zum Standard wurde, erhielt in Java 10 ein Upgrade. Der volle GC (Gültelbereinigung) für G1 ist jetzt parallel, was die Unterbrechungszeiten auf großen Heaps erheblich reduzieren kann.

Obwohl Sie möglicherweise nicht direkt mit dieser Funktion in Ihrem Code interagieren, ist es gut zu wissen, dass Ihre Java-Anwendungen möglicherweise schneller und effizienter laufen können.

Anwendungs-Class-Data-Sharing

Java 10 erweiterte die bestehende Class-Data-Sharing (CDS)-Funktion, um Anwendungsklassen in den gemeinsam genutzten Archiv zu platzieren. Dies kann die Startzeit verbessern und den Speicherfußabdruck verringern, insbesondere wenn mehrere JVMs dieselbe Anwendung auf demselben Computer ausführen.

Um diese Funktion zu verwenden, müssen Sie Ihre Anwendung mit spezifischen JVM-Argumenten ausführen. Hier ist ein Beispiel:

# Schritt 1: Erstellen Sie ein gemeinsam genutztes Archiv
java -Xshare:dump -XX:+UseAppCDS -XX:DumpLoadedClassList=classes.lst -cp myapp.jar MyApp

# Schritt 2: Führen Sie die Anwendung mit dem gemeinsam genutzten Archiv aus
java -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=classes.jsa -cp myapp.jar MyApp

Diese Funktion ist besonders nützlich für Mikrodienste und containerbasierte Anwendungen, bei denen schnelle Startzeiten entscheidend sind.

Schlussfolgerung

Java 10, obwohl relativ klein, brachte einige wertvolle Funktionen, die Ihre Programmiererfahrung verbessern können. Vom Komfort der lokalen Variablen-Typ-Inferenz bis zu Leistungsoptimierungen mit parallelem vollem GC für G1 und Anwendungs-Class-Data-Sharing tragen diese Funktionen dazu bei, Java zu einer effizienteren und benutzerfreundlicheren Sprache zu machen.

Denken Sie daran, dass der beste Weg, diese Funktionen zu lernen, ist, sie zu üben. Versuchen Sie, sie in Ihre Projekte zu integrieren, und Sie werden很快 sehen, wie sie Ihren Code verbessern. Viel Spaß beim Programmieren und möge Ihre Java-Reise mit aufregenden Entdeckungen gefüllt sein!

Credits: Image by storyset