Nouvelles fonctionnalités de Java 11

JavaJavaBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Java 11 a été publié en septembre 2018 et a introduit de nombreuses nouvelles fonctionnalités et modifications à la plateforme. Ce laboratoire vous guidera dans le processus de mise en route avec Java 11 et dans l'exploration de ses nouvelles fonctionnalités.

Configuration de l'environnement

Tout d'abord, assurez-vous que le JDK 11 est installé sur votre système. Vous pouvez le vérifier en exécutant la commande suivante dans votre terminal :

java -version

Si Java 11 n'est pas installé, vous pouvez le télécharger sur le site web d'Oracle ou utiliser un gestionnaire de packages tel que apt-get ou yum.

Une fois le JDK configuré, créez un fichier Java avec la commande suivante :

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

Maintenant que le fichier Java a été créé, ouvrez-le dans votre éditeur de texte favori.

touch MyFirstJavaProgram.java

Exécution de fichiers Java

Avant Java 11, il fallait compiler un fichier Java à l'aide de la commande javac puis l'exécuter à l'aide de la commande java. Avec Java 11, on peut exécuter directement un fichier Java à l'aide de la seule commande java.

Dans le fichier MyFirstJavaProgram.java, ajoutez le code suivant :

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

Enregistrez le fichier et exécutez-le à l'aide de la commande suivante :

java MyFirstJavaProgram.java

Vous devriez voir "Hello, Java 11!" affiché dans la console.

Nouvelles méthodes de la classe String

Java 11 a introduit quelques nouvelles méthodes dans la classe String. Dans cette étape, nous allons explorer ces nouvelles méthodes.

Méthode isBlank()

La méthode isBlank() est utilisée pour vérifier si une chaîne de caractères est vide ou non. Une chaîne de caractères vide ou une chaîne composée uniquement d'espaces est considérée comme vide.

Dans le fichier MyFirstJavaProgram.java, ajoutez le code suivant :

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

System.out.println("s1 est vide : " + s1.isBlank());
System.out.println("s2 est vide : " + s2.isBlank());
System.out.println("s3 est vide : " + s3.isBlank());

Enregistrez le fichier et exécutez-le à l'aide de la commande suivante :

javac MyFirstJavaProgram.java
java MyFirstJavaProgram

Vous devriez voir la sortie suivante :

s1 est vide : true
s2 est vide : true
s3 est vide : false
Méthodes strip(), stripLeading() et stripTrailing()

Les méthodes strip(), stripLeading() et stripTrailing() sont utilisées pour supprimer les espaces blancs d'une chaîne de caractères. Elles sont similaires à la méthode existante trim() mais offrent une prise en charge Unicode.

Dans le fichier MyFirstJavaProgram.java, ajoutez le code suivant :

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

Enregistrez le fichier et exécutez-le à l'aide de la commande suivante :

javac MyFirstJavaProgram.java
java MyFirstJavaProgram

Vous devriez voir la sortie suivante :

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

Contrôle d'accès basé sur les nœuds imbriqués

Java 11 a introduit une nouvelle fonctionnalité qui nous permet d'accéder aux membres privés d'une classe imbriquée à l'aide de l'API de réflexion. Dans cette étape, nous allons explorer cette nouvelle fonctionnalité.

Dans le fichier MyFirstJavaProgram.java, ajoutez le code suivant :

public class Demo {
    private void privateMethod() {
        System.out.print("Méthode privée");
    }
    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()));
    }
}

Enregistrez le fichier et exécutez-le à l'aide de la commande suivante :

javac MyFirstJavaProgram.java
java MyFirstJavaProgram

Vous devriez voir la sortie suivante :

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

Nouvelles méthodes de la classe File

Java 11 a introduit quelques nouvelles méthodes dans la classe Files qui facilitent la lecture et l'écriture de chaînes de caractères. Dans cette étape, nous allons explorer ces nouvelles méthodes.

Dans le fichier MyFirstJavaProgram.java, ajoutez le code suivant :

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("fichierTemporaire", ".txt");
        // Écriture dans le fichier
        Files.writeString(path, "Hello World");
        // Lecture du fichier
        String s = Files.readString(path);
        System.out.print(s);
    }
}

Enregistrez le fichier et exécutez-le à l'aide de la commande suivante :

javac MyFirstJavaProgram.java
java MyFirstJavaProgram

Vous devriez voir la sortie suivante :

Hello World

Conversion d'une collection en tableau

Java 11 a introduit une nouvelle méthode par défaut toArray() qui facilite la conversion d'une collection en un tableau du type correct.

Dans le fichier MyFirstJavaProgram.java, ajoutez le code suivant :

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));
    }
}

Enregistrez le fichier et exécutez-le à l'aide de la commande suivante :

javac MyFirstJavaProgram.java
java MyFirstJavaProgram

Vous devriez voir la sortie suivante :

[5, 10, 15]

La méthode not()

Java 11 a introduit une nouvelle méthode not() dans l'interface Predicate qui est utilisée pour négater un prédicat. Dans cette étape, nous allons explorer cette fonctionnalité.

Dans le fichier MyFirstJavaProgram.java, ajoutez le code suivant :

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);
    }
}

Enregistrez le fichier et exécutez-le à l'aide de la commande suivante :

javac MyFirstJavaProgram.java
java MyFirstJavaProgram

Vous devriez voir la sortie suivante :

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

Client HTTP

L'API Client HTTP a été introduite en Java 9 et est devenue standard en Java 11. Dans cette étape, nous allons explorer comment utiliser la nouvelle API Client HTTP.

Dans le fichier MyFirstJavaProgram.java, ajoutez le code suivant :

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());
    }
}

Enregistrez le fichier et exécutez-le à l'aide de la commande suivante :

javac MyFirstJavaProgram.java
java MyFirstJavaProgram

Vous devriez voir le code HTML de la page d'accueil de Google dans la console.

Syntaxe des variables locales pour les expressions lambda

Java 11 a introduit le mot-clé var pour nous permettre d'utiliser la syntaxe des variables locales pour les expressions lambda. Dans cette étape, nous allons explorer cette nouvelle fonctionnalité.

Dans le fichier MyFirstJavaProgram.java, ajoutez le code suivant :

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"));
    }
}

Enregistrez le fichier et exécutez-le à l'aide de la commande suivante :

javac MyFirstJavaProgram.java
java MyFirstJavaProgram

Vous devriez voir true affiché dans la console.

Ramasse-miettes Epsilon

Java 11 a introduit une nouvelle fonctionnalité expérimentale appelée ramasse-miettes Epsilon, qui alloue de la mémoire mais ne ramasse jamais de déchets mémoire. Dans cette étape, nous allons explorer cette fonctionnalité expérimentale.

Dans le fichier MyFirstJavaProgram.java, ajoutez le code suivant :

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

Enregistrez le fichier et exécutez-le à l'aide de la commande suivante :

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

Vous devriez voir "Allocated 1GB of memory" affiché dans la console, suivi de la sortie du programme avec le code 0.

Sommaire

Dans ce laboratoire, vous avez appris les nouvelles fonctionnalités introduites dans Java 11, y compris les nouvelles méthodes de la classe String, le contrôle d'accès basé sur les niveaux d'imbrication, les nouvelles méthodes de la classe File, et bien d'autres encore. Vous avez également appris à utiliser la nouvelle API Client HTTP et le ramasse-miettes Epsilon. Vous devriez maintenant avoir une meilleure compréhension de Java 11 et de ses capacités.