Esta clase requiere la versión 1.8.0 de jdk y mi versión es jdk11. ¿Cuál es la diferencia?
Nuevas características de JDK1.8:
Primero, el método predeterminado de la interfaz Java 8 nos permite agregar una implementación de método no abstracto a la interfaz, solo use la palabra clave predeterminada, También llamado método de extensión.
En segundo lugar, las expresiones Lambda en Java 8 no necesitan utilizar este método de objeto anónimo tradicional. Java 8 proporciona una sintaxis más concisa, expresión lambda:
Collections.sort(name, (String a, String b) - gt; { return b. compare to (a); }) ;
3. ¿Cómo se expresan las expresiones Lambda de interfaces funcionales en el sistema de tipos Java? Cada expresión lambda corresponde a un tipo, normalmente un tipo de interfaz.
La "interfaz funcional" se refiere a una interfaz que contiene solo un método abstracto. Cada expresión lambda de este tipo coincidirá con este método abstracto. Debido a que los métodos predeterminados no son métodos abstractos, también puede agregar métodos predeterminados a través de interfaces funcionales.
4. Referencias de métodos y constructores Java 8 permite el uso de:: palabra clave para pasar referencias de métodos o constructores. El código anterior muestra cómo hacer referencia a un método estático. También podemos hacer referencia al método de un objeto:
convertidor = algo::comienza con
cadena convertida = convertidor. ");
System.out.println (convertido);
El alcance 5.lambda accede al alcance externo en expresiones Lambda de la misma manera que las versiones anteriores de objetos anónimos similares. Puede acceder directamente a variables locales externas marcadas como finales, o a campos y variables estáticas de una instancia.
6. El acceso a variables locales puede acceder directamente a variables locales externas en expresiones lambda:
7. El acceso a los campos de objetos es diferente de las variables estáticas y las variables locales. Las lambdas se pueden leer y escribir, por ejemplo, campos y variables estáticas. Este comportamiento es consistente con objetos anónimos:
8. El método predeterminado para acceder a la interfaz API JDK 1.8 contiene muchas interfaces de funciones integradas, como comparadores o interfaces ejecutables, que se usan comúnmente en Java antiguo. Estas interfaces se han anotado con @FunctionalInterface para usar en lambdas.
La API de Java 8 también proporciona muchas interfaces funcionales nuevas para hacer el trabajo más cómodo. Parte de la interfaz proviene de la biblioteca de Google Guava. Incluso si está familiarizado con estas interfaces, vale la pena ver cómo se extienden a las lambdas.
Datos extendidos:
Nuevas características de jdk11:
1, mejora de cadena
//Determinar si la cadena está vacía" " . está en blanco(); // verdadero // Elimina los espacios iniciales y finales "Javastack". strip(); // "Javastack" // Elimina los espacios finales "Javastack". stripTrailing().
//Eliminar el espacio del encabezado "Javastack". strip líder(); // "Javastack" //Copia la cadena "Java".
Repetir(3); // "JavaJavaJava" //Número de líneas " A\nB\nC ". línea(). count(); // 3
2. HttClient Api
Esta es una API de cliente HTTP en incubación introducida por Java 9 para procesar solicitudes HTTP. Esta API admite tanto sincrónica como asincrónica, pero está disponible oficialmente en Java 11. Puede encontrar esta API en el paquete java.net.
3. Sintaxis de variable local para parámetros Lambda
La sintaxis de variable local para parámetros Lambda solo admite derivación de tipo:
var x = new A(); (var x : xs) {...}try (var x =...) { ...}catch...
4. 9, JDK usa G1 como recolector de basura predeterminado. Se puede decir que G1 es un hito en GC. Antes de G1, la recuperación de GC todavía se basaba en áreas de memoria fijas, mientras que G1 adoptaba una estrategia de administración de memoria "de grano fino" que no distinguía entre Explorer, Eden y áreas de memoria antiguas.
No necesitamos utilizar estrategias de reciclaje para la generación más joven. En la vejez, utilizamos una estrategia de reciclaje y la reemplazamos con una estrategia general de reciclaje de memoria.
Esta estrategia de reciclaje proporciona un mejor rendimiento a medida que la escala de CPU, memoria y servicios continúa aumentando. Esta generación de ZGC ha logrado grandes avances.
En principio, ZGC puede considerarse como una estrategia de gestión de memoria más detallada además de G1. Debido a que la asignación y el reciclaje continuos de memoria generarán una gran cantidad de espacio de fragmentación de la memoria, se necesitan estrategias organizativas para evitar la fragmentación de la memoria.
La lógica de subprocesos que requiere pausar las referencias de memoria durante la clasificación se denomina "detener". Solo después de la finalización la lógica del subproceso puede continuar ejecutándose.