Neue Funktionen in Java 11

JavaJavaBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Java 11 wurde im September 2018 veröffentlicht und brachte viele neue Funktionen und Änderungen für die Plattform mit sich. In diesem Lab werden Sie durch den Prozess des Einstiegs in Java 11 und die Erkundung seiner neuen Funktionen geführt.

Umgebung einrichten

Stellen Sie zunächst sicher, dass JDK 11 auf Ihrem System installiert ist. Sie können dies überprüfen, indem Sie den folgenden Befehl in Ihrem Terminal ausführen:

java -version

Wenn Java 11 nicht installiert ist, können Sie es von der Oracle-Website herunterladen oder einen Paketmanager wie apt-get oder yum verwenden.

Sobald der JDK eingerichtet ist, erstellen Sie eine Java-Datei mit dem folgenden Befehl:

mkdir -p ~/project && cd ~/project
touch MyFirstJavaProgram.java

Jetzt, nachdem die Java-Datei erstellt wurde, öffnen Sie sie in Ihrem Lieblings-Texteditor.

touch MyFirstJavaProgram.java

Ausführen von Java-Dateien

Vor Java 11 mussten wir eine Java-Datei mit dem Befehl javac kompilieren und dann mit dem Befehl java ausführen. Mit Java 11 können wir eine Java-Datei direkt mit dem Befehl java ausführen.

Fügen Sie im Datei MyFirstJavaProgram.java folgenden Code hinzu:

public class MyFirstJavaProgram {
    public static void main(String[] args) {
        System.out.println("Hello, Java 11!");
    }
}

Speichern Sie die Datei und führen Sie sie mit dem folgenden Befehl aus:

java MyFirstJavaProgram.java

Sie sollten in der Konsole "Hello, Java 11!" sehen.

Neue String-Methoden

Java 11 hat einige neue Methoden der String-Klasse eingeführt. In diesem Schritt werden wir diese neuen Methoden erkunden.

isBlank() - Methode

Die isBlank()-Methode wird verwendet, um zu überprüfen, ob ein String leer ist oder nicht. Ein leerer String oder ein String, der nur aus Leerzeichen besteht, wird als leer betrachtet.

Fügen Sie im Datei MyFirstJavaProgram.java folgenden Code hinzu:

String s1 = "";
String s2 = "    ";
String s3 = "String";

System.out.println("s1 ist leer: " + s1.isBlank());
System.out.println("s2 ist leer: " + s2.isBlank());
System.out.println("s3 ist leer: " + s3.isBlank());

Speichern Sie die Datei und führen Sie sie mit dem folgenden Befehl aus:

javac MyFirstJavaProgram.java
java MyFirstJavaProgram

Sie sollten die folgende Ausgabe sehen:

s1 ist leer: true
s2 ist leer: true
s3 ist leer: false
strip(), stripLeading() und stripTrailing() - Methoden

Die strip(), stripLeading() und stripTrailing()-Methoden werden verwendet, um Leerzeichen aus einem String zu entfernen. Sie ähneln der vorhandenen trim()-Methode, bieten jedoch Unicode-Unterstützung.

Fügen Sie im Datei MyFirstJavaProgram.java folgenden Code hinzu:

String s = "   String   ";
System.out.println("$" + s + "$");
System.out.println("$" + s.strip() + "$");
System.out.println("$" + s.stripLeading() + "$");
System.out.println("$" + s.stripTrailing() + "$");

Speichern Sie die Datei und führen Sie sie mit dem folgenden Befehl aus:

javac MyFirstJavaProgram.java
java MyFirstJavaProgram

Sie sollten die folgende Ausgabe sehen:

$   String   $
$String$
$String   $
$   String$

Nest-basierter Zugangskontrolle

Java 11 hat eine neue Funktion eingeführt, die es uns ermöglicht, private Member einer geschachtelten Klasse über die Reflection-API zuzugreifen. In diesem Schritt werden wir diese neue Funktion erkunden.

Fügen Sie im Datei MyFirstJavaProgram.java folgenden Code hinzu:

public class Demo {
    private void privateMethod() {
        System.out.print("Private Methode");
    }
    class NestedClass {
        public void callPrivateMethod() {
            privateMethod();
        }
    }
    public static void main(String[] args) {
        System.out.println(Demo.class.isNestmateOf(Demo.NestedClass.class));
        System.out.println(Demo.NestedClass.class.isNestmateOf(Demo.class));
        System.out.println(Demo.NestedClass.class.getNestHost());
        System.out.println(Arrays.toString(Demo.class.getNestMembers()));
    }
}

Speichern Sie die Datei und führen Sie sie mit dem folgenden Befehl aus:

javac MyFirstJavaProgram.java
java MyFirstJavaProgram

Sie sollten die folgende Ausgabe sehen:

true
true
class Demo
[class MyFirstJavaProgram$Demo$NestedClass]

Neue Dateimethoden

Java 11 hat einige neue Methoden für die Files-Klasse eingeführt, die das Lesen und Schreiben von Zeichenketten einfacher machen. In diesem Schritt werden wir diese neuen Methoden erkunden.

Fügen Sie im Datei MyFirstJavaProgram.java folgenden Code hinzu:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class Demo {
    public static void main(String[] args) throws IOException {
        Path path = Files.createTempFile("temporaryFile", ".txt");
        //Schreiben in die Datei
        Files.writeString(path, "Hello World");
        //Lesen aus der Datei
        String s = Files.readString(path);
        System.out.print(s);
    }
}

Speichern Sie die Datei und führen Sie sie mit dem folgenden Befehl aus:

javac MyFirstJavaProgram.java
java MyFirstJavaProgram

Sie sollten die folgende Ausgabe sehen:

Hello World

Sammlung in ein Array

Java 11 hat eine neue Standard-Methode toArray() eingeführt, die es ermöglicht, eine Sammlung einfach in ein Array vom richtigen Typ umzuwandeln.

Fügen Sie im Datei MyFirstJavaProgram.java folgenden Code hinzu:

import java.util.ArrayList;
import java.util.Arrays;

public class Demo {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(5);
        list.add(10);
        list.add(15);

        Integer[] intArr = list.toArray(Integer[]::new);
        System.out.print(Arrays.toString(intArr));
    }
}

Speichern Sie die Datei und führen Sie sie mit dem folgenden Befehl aus:

javac MyFirstJavaProgram.java
java MyFirstJavaProgram

Sie sollten die folgende Ausgabe sehen:

[5, 10, 15]

Die not()-Methode

Java 11 hat in der Predicate-Schnittstelle eine neue not()-Methode eingeführt, die verwendet wird, um einen Prädikaten zu negieren. In diesem Schritt werden wir diese Funktion erkunden.

Fügen Sie im Datei MyFirstJavaProgram.java folgenden Code hinzu:

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public class Demo {
    public static void main(String[] args) {
        Predicate<String> startWithZ = s -> s.charAt(0) == 'z';
        Predicate<String> doesNotStartWithZ = Predicate.not(startWithZ);

        List<String> list = Arrays.asList("za", "zq", "az", "aq", "zz");
        List<String> strsStartingWithZ = list.stream()
              .filter(startWithZ)
              .collect(Collectors.toList());
        List<String> strsNotStartingWithZ = list.stream()
              .filter(doesNotStartWithZ)
              .collect(Collectors.toList());

        System.out.println(strsStartingWithZ);
        System.out.println(strsNotStartingWithZ);
    }
}

Speichern Sie die Datei und führen Sie sie mit dem folgenden Befehl aus:

javac MyFirstJavaProgram.java
java MyFirstJavaProgram

Sie sollten die folgende Ausgabe sehen:

[za, zq, zz]
[az, aq]

HTTP-Client

Die HTTP-Client-API wurde in Java 9 eingeführt und in Java 11 standardmäßig gemacht. In diesem Schritt werden wir untersuchen, wie die neue HTTP-Client-API verwendet wird.

Fügen Sie im Datei MyFirstJavaProgram.java folgenden Code hinzu:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;

public class Demo {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
             .uri(new URI("https://www.google.com"))
             .GET()
             .build();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));
        System.out.println(response.body());
    }
}

Speichern Sie die Datei und führen Sie sie mit dem folgenden Befehl aus:

javac MyFirstJavaProgram.java
java MyFirstJavaProgram

Im Konsolenfenster sollten Sie den HTML-Code der Google-Homepage sehen.

Lokale-Variable-Syntax für Lambda

Java 11 hat das Schlüsselwort var eingeführt, um es uns zu ermöglichen, die lokale-Variable-Syntax für Lambda-Ausdrücke zu verwenden. In diesem Schritt werden wir diese neue Funktion erkunden.

Fügen Sie im Datei MyFirstJavaProgram.java folgenden Code hinzu:

import java.util.function.Predicate;

public class Demo {
    public static void main(String[] args) {
        Predicate<String> startsWithZ = (@NotNull var str) -> str.charAt(0) == 'z';
        System.out.println(startsWithZ.test("zoo"));
    }
}

Speichern Sie die Datei und führen Sie sie mit dem folgenden Befehl aus:

javac MyFirstJavaProgram.java
java MyFirstJavaProgram

Im Konsolenfenster sollten Sie true ausgegeben sehen.

Epsilon-Garbage Collector

Java 11 hat ein neues experimentelles Feature namens Epsilon-Garbage Collector eingeführt, das Speicher allokiert, aber nie Garbage sammelt. In diesem Schritt werden wir dieses experimentelle Feature untersuchen.

Fügen Sie im Datei MyFirstJavaProgram.java folgenden Code hinzu:

public class Demo {
    public static void main(String[] args) {
        byte[] b = new byte[1024 * 1024 * 1024];
        System.out.println("Allocated 1GB of memory");
    }
}

Speichern Sie die Datei und führen Sie sie mit dem folgenden Befehl aus:

java -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC MyFirstJavaProgram.java

Im Konsolenfenster sollten Sie "Allocated 1GB of memory" ausgegeben sehen, gefolgt von dem Programm, das mit dem Code 0 beendet wird.

Zusammenfassung

In diesem Lab haben Sie über die neuen Funktionen von Java 11 gelernt, darunter neue String-Methoden, die nestbasierte Zugangskontrolle, neue Dateimethoden und mehr. Sie haben auch gelernt, wie die neue HTTP-Client-API und der Epsilon-Garbage Collector verwendet werden. Sie sollten jetzt ein besseres Verständnis von Java 11 und seinen Fähigkeiten haben.