Qué funciones se han optimizado en JDK11 y qué nuevas características se han agregado | Análisis de características de cada versión de JDK

Insertar descripción de la imagen aquí

I. Introducción

El último número habló sobre algunas características nuevas de JDK10. Los amigos que necesiten revisarlo pueden ir a esta columna para revisarlo.

Este número habla sobre algunas características nuevas de JDK11.

2. Nuevas funciones

Las siguientes son algunas características nuevas o modificadas en JDK 11:

1. Cliente HTTP de tipo cadena pura:

JDK 11 introduce una nueva API de cliente para el protocolo HTTP, que proporciona una forma sencilla de enviar solicitudes HTTP y manejar respuestas. He aquí un ejemplo sencillo:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class HttpClientExample {
    
    
    public static void main(String[] args) {
    
    
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://api.example.com/users"))
                .build();

        client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
                .thenApply(HttpResponse::body)
                .thenAccept(System.out::println)
                .join();
    }
}

2. Mejora de la inferencia de tipos de variables locales:

JDK 11 admite el uso de palabras clave en expresiones lambda vary permite la inferencia de tipos en más escenarios. Por ejemplo:

import java.util.List;

public class VarExample {
    
    
    public static void main(String[] args) {
    
    
        List<String> names = List.of("Alice", "Bob", "Charlie");

        names.forEach((var name) -> {
    
    
            System.out.println(name);
        });
    }
}

3. Recolector de basura G1 obsoleto:

JDK 11 dejó obsoletas algunas opciones de marca en el recolector de basura G1 y ya no se recomienda su uso.

4. Nuevos métodos de la clase String:

JDK 11 Stringagrega algunos métodos nuevos en la clase, como isBlank(), lines(), strip(), stripLeading()etc. stripTrailing(), para un procesamiento conveniente de cadenas.

Por supuesto, hay otros cambios y novedades, que continúan de la siguiente manera:

5. JDK 11 permite el uso de var en parámetros de expresiones lambda

Local-Variable Syntax for Lambda Parameters: JDK 11 permite el uso en parámetros de expresiones lambda varpara simplificar el código. Por ejemplo:

import java.util.function.Predicate;

public class LambdaExample {
    
    
    public static void main(String[] args) {
    
    
        Predicate<String> startsWithA = (var s) -> s.startsWith("A");

        System.out.println(startsWithA.test("Apple")); // true
        System.out.println(startsWithA.test("Banana")); // false
    }
}

6. Control de acceso anidado

Nest-Based Access Control: JDK 11 introduce un nuevo método de control de acceso, control de acceso anidado. En clases anidadas, se puede acceder a miembros privados de clases externas. Por ejemplo:

public class Outer {
    
    
    private static String message = "Hello";

    public static class Inner {
    
    
        public void printMessage() {
    
    
            System.out.println(message);
        }
    }

    public static void main(String[] args) {
    
    
        Inner inner = new Inner();
        inner.printMessage();
    }
}

7. Nuevo recolector de basura Epsilon

Epsilon: A No-Op Garbage Collector: JDK 11 presenta un nuevo recolector de basura llamado Epsilon, que en realidad es un recolector de basura no operativo que se utiliza con fines de prueba y ajuste del rendimiento.

8. Unicódigo 10:

Unicode 10: JDK 11 actualiza la versión Unicode para admitir más caracteres y símbolos.

9. Cliente HTTP (estándar):

HTTP Client (Standard): JDK 11 introduce un nuevo cliente HTTP estándar, que reemplaza al obsoleto HttpURLConnection. La nueva API de cliente HTTP proporciona una forma más sencilla y flexible de realizar solicitudes HTTP y gestionar respuestas.

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class HttpClientExample {
    
    
    public static void main(String[] args) throws Exception {
    
    
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://api.example.com/data"))
                .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}

10. Permite ejecutar un único archivo fuente directamente sin compilarlo primero.

Launch Single-File Source Code: JDK 11 permite ejecutar archivos fuente individuales directamente sin compilarlos primero, lo cual es muy conveniente para scripts simples y aplicaciones pequeñas.

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

Se puede ejecutar directamente:java HelloWorld.java

11. Se introdujo el recolector de basura ZGC.

ZGC: A Scalable Low-Latency Garbage Collector: JDK 11 presenta ZGC (Z Garbage Collector), que es un recolector de basura de baja latencia adecuado para aplicaciones de gran memoria y escenarios que requieren una respuesta rápida.

12.JDK 11 desaproba los módulos Security Manager y Java EE

Deprecate the Security Manager and the Java EE Modules: JDK 11 deja obsoletos los módulos Security Manager y Java EE, lo que anima a los desarrolladores a utilizar marcos y tecnologías de seguridad más modernos.

Las anteriores son algunas de las características y mejoras importantes de JDK 11. Esta versión también contiene muchas otras pequeñas mejoras y correcciones.

3. Retire y deseche los artículos

En JDK 11, algunas funciones se han eliminado o han quedado obsoletas. Aquí hay algunas instrucciones detalladas y código de muestra:

  1. Funciones eliminadas
  • Java EEMódulos: JDK 11 ha eliminado algunos módulos relacionados con Java EE, como java.xml.ws, java.xml.bind, java.xml.ws.annotationetc. java.corbaEstos módulos han quedado obsoletos en JDK 9. Si necesita utilizar estas funciones, puede considerar utilizar Jakarta EE u otras alternativas.

Código de muestra: en JDK 11, si se utiliza la siguiente declaración de importación en su código, se producirá un error de compilación:

import javax.xml.ws.WebServiceClient;
import javax.xml.bind.annotation.XmlRootElement;
  1. Funcionalidad obsoleta
  • Security Manager: En JDK 11, Security Manager está en desuso. Security Manager es un mecanismo de seguridad utilizado para controlar los derechos de acceso a las aplicaciones Java. En JDK 11, se anima a los desarrolladores a utilizar marcos y tecnologías de seguridad más modernos, como una combinación de archivos de Security Manager y Security Policy.

Código de muestra: en JDK 11, si su código utiliza API relacionadas con Security Manager, como el siguiente código, aparecerá una advertencia durante la compilación:

System.setSecurityManager(new SecurityManager());
  • Pack200Herramientas y API: Pack200 es una herramienta para comprimir y descomprimir archivos JAR. En JDK 11, las herramientas Pack200 y las API relacionadas están en desuso. Esto se debe a que la herramienta Pack200 no se utiliza habitualmente en la práctica y existen mejores alternativas.

Código de muestra: en JDK 11, si su código utiliza clases y métodos relacionados con Pack200, como el siguiente código, aparecerá una advertencia durante la compilación:

import java.util.jar.Pack200;

public class Example {
    
    
    public static void main(String[] args) {
    
    
        Pack200.Unpacker unpacker = Pack200.newUnpacker();
        // ...
    }
}
  • Otros métodos y clases en desuso: JDK 11 también dejó en desuso algunos métodos y clases que llevaban mucho tiempo en desuso, como Runtime.runFinalizersOnExit()y Thread.stop(Throwable). Estos métodos y clases están en desuso y pueden eliminarse en futuras versiones de JDK.

Código de muestra: en JDK 11, si su código utiliza métodos y clases obsoletos, como el siguiente código, aparecerá una advertencia durante la compilación:

Runtime.runFinalizersOnExit(true);
Thread.stop(new Throwable());

Tenga en cuenta que el código de muestra anterior solo se utiliza para ilustrar las funciones eliminadas y obsoletas en JDK 11, y puede no ser aplicable a todos los escenarios. En uso real, consulte la documentación oficial de JDK 11 y un código de muestra más específico.

Supongo que te gusta

Origin blog.csdn.net/qq_27471405/article/details/133402513
Recomendado
Clasificación