Todo lo que has escuchado sobre Java 8 se centra en las expresiones Lambda. Pero es solo parte de Java 8. Java 8 tiene muchas características nuevas: algunas nuevas y poderosas clases y sintaxis, y otras cosas que deberían tener desde el principio.
Voy a presentar 10 características esenciales que creo que vale la pena conocer. Al menos uno o dos de ellos también estarán allí para que lo intentes, ¡así que comencemos!
1. Método predeterminado
Una característica recientemente agregada del lenguaje Java es que puede agregar cuerpos de métodos (llamados métodos predeterminados) a los métodos de interfaces. Estos métodos se agregarán implícitamente a la clase que implementa esta interfaz.
Esto le permite agregar nuevas funciones a las bibliotecas existentes sin romper su código. Esto es obviamente una mejora. Pero, por otro lado, esto ofusca los límites entre interfaces y clases, porque las interfaces se utilizan para definir contratos, mientras que las clases se utilizan para definir implementaciones concretas. En el lado positivo, hace que la interfaz sea más inteligente de una manera elegante y evita la duplicación y la extensión de las bibliotecas. Pero en el lado malo, veremos más tarde que el método de interfaz consulta esto y lo convierte en clases concretas. Escalofríos….
2. Terminación del proceso
Comenzar un proceso externo es la mitad de lo que hace: cuando el proceso se bloquea, cuelga o consume 100% de CPU, debe regresar y depurarlo. La clase de proceso ahora está equipada con dos nuevos métodos para ayudarlo a controlar los procesos rebeldes.
El primero es isalive (), que le permite verificar si el proceso aún se está ejecutando sin esperar que el proceso se complete. El segundo método más poderoso es DestroyForCable (), lo que le permite forzar procesos de matar que están programados o que ya no se necesitan.
3. Stampedlocks
Hay algo emocionante ahora. A nadie le gusta sincronizar código. Es el culpable de reducir el rendimiento de su aplicación (especialmente aplicaciones escalables), o más severamente causando que la aplicación cuelgue. Aún así, en algún momento no tienes otra opción.
Hay muchas formas de limitar el acceso a recursos críticos de manera sincrónica multiproceso. Los más famosos de ellos son las cerraduras de lectura-escritura (ReadWriteLock) e implementaciones relacionadas con él. Reduce la competencia de recursos al permitir que múltiples hilos accedan al mismo recurso, pero bloquean los hilos que operan el recurso. Esto suena bien en teoría, pero de hecho este bloqueo es bastante lento, especialmente cuando hay una gran cantidad de hilos de escritura.
Nota: El bloqueo de lectura-escritura divide a los visitantes de recursos en dos categorías: lector y escritor. El lector realiza operaciones de solo lectura en el recurso, y el escritor puede operar el recurso.
Java 8 presenta un nuevo bloqueo de lectura de lectura llamado Stampedlock. Este bloqueo no solo es más rápido, proporciona un poderoso conjunto de bloqueos de optimismo, a través del cual puede obtener un bloqueo de lector al costo mínimo e incluso no desea operaciones de escritura durante la selección. Después de que termine la selección, puede consultar el bloqueo para ver si hay una operación de escritura durante la selección, en cuyo caso puede elegir si intentarlo nuevamente, actualizar el bloqueo o rendirse.
Este bloqueo es una herramienta muy poderosa y necesita un artículo especial para describirlo. ¡Estaba tan emocionado por esta nueva cosa que estaba mareado y bien hecho!
Para más detalles, consulte aquí
4. Admiradores concurrentes
Este es otro bebé pequeño para aquellos que trabajan en aplicaciones multiproceso. Esta es una nueva API simple y eficiente para contadores multiproceso, que es más rápido que usar AtomicInteger. ¡Así que jodidamente genial!
5. Valores opcionales
Oh, Null Pointer, una pesadilla para todos los desarrolladores de Java. Desde el principio (o al menos en 1965) fue probablemente la excepción más popular.
Dibujo de Scale y Hashell, Java 8 tiene una nueva plantilla llamada opcional para encapsular referencias que pueden ser nulas. De ninguna manera es una bala de plata finalizar nula, es una forma de permitir que el diseñador de API indique desde el nivel de código (en lugar del nivel de documento) que un valor nulo puede pasar a un método o devolver de un método para preparar la persona que llama para el valor nulo. Por lo tanto, esto solo puede funcionar bajo la nueva API, y suponiendo que la persona que llame no permita que la referencia escape de la encapsulación, lo que resulta en desferencias inseguras.
Tengo que decir que estoy muy en conflicto con esta característica. Por un lado, hay un gran problema con NULL, por lo que tiendo a hacer todo bien antes de que ocurra NULL. Pero por otro lado, dudo que tenga éxito. Esto se debe a que el uso de opcional requiere esfuerzos constantes de toda la compañía, pero no tiene valor directo. A menos que sea decisivo, es probable que sea abandonado.
Para obtener más información sobre Opcional, haga clic aquí
6. Anotar cualquier cosa
Otra pequeña mejora del lenguaje de Java es que ahora se pueden agregar anotaciones a casi todo en su código. En el pasado, las anotaciones solo se podían agregar a la declaración de clase o método. Las anotaciones que usan Java 8 se pueden agregar a declaraciones variables y de parámetros, no solo al pasar un valor a un tipo específico, sino incluso al asignar espacio a un nuevo objeto. Esto es parte de hacer que el lenguaje Java sea más amigable y enfocado (junto con las herramientas de documentación de Java y las mejoras de API) a través del análisis estático y las herramientas de asistentes como FindBugs. Esta es una gran característica, pero algo más como Invokedynamic introducido en Java 7, y su valor real es lo que hace la comunidad con él.
7. Operación de desbordamiento
Ahora aquí hay una serie de métodos que deberían incluirse en la biblioteca central desde el principio. Uno de mis hábitos favoritos es depurar los desbordamientos cuando INT excede 2^32 y luego continuar creando este infame error al azar (como "¿Cómo obtuve este extraño valor?").
Esta vez no hay una bala de plata, pero hay una serie de funciones que operan números que arrojan excepciones cuando el desbordamiento ocurre de una manera que es más tolerante que el operador estándar +/* que implícitamente causa desbordamiento ... si fuera yo, lo establecería como el modo predeterminado del JVM, utilizando funciones explícitas que permiten el Overflow (en lugar del operador +*).
8. Asejo de carpetas
El contenido de iteradores de árboles de directorio ha aparecido muy temprano en las búsquedas de Google (en este caso, puede usar apache.fileutils). Java 8
Se agregaron 10 nuevos métodos para archivos. Mi favorito es Walk (), que crea una transmisión perezosa (importante para los sistemas de archivos grandes) para iterar
Contenido de la estructura del directorio.
9. Generación de números aleatorios fuertes
La charla de hoy sobre la vulnerabilidad de las contraseñas y las claves es imprescindible. La seguridad del programa es un problema difícil y es fácil cometer errores. Esto es también lo que me gusta
La razón del método NewerAndom.getInStancEstrong () que puede seleccionar automáticamente el generador de números aleatorios más fuertes en JVM. Se reduce
Las posibilidades de una falla del generador o un generador débil se obtienen de forma predeterminada, lo que resulta en la posibilidad de que la clave o el valor de cifrado se descifraran fácilmente.
10. Fecha.toinstant ()
Java 8 presenta una nueva API de fecha de fecha. Debido a que la API existente no es buena, esto es bastante comprensible. Ahora Joda ha centrado y penetrado en la API de fecha de fecha de Java durante muchos años. Sin embargo, incluso con la nueva API, todavía hay un gran problema: hay toneladas de código y bibliotecas que usan la antigua API.
Todos sabemos que enfrentar este problema, entonces, ¿qué debemos hacer?
Debido a que Java 8 ha hecho con bastante elegancia, se agregó un nuevo método a Instant () a la clase de fecha para convertirlo en una nueva API. Incluso utilizando la API de fecha anterior (lo mismo en el futuro previsible), le permitirá actualizar rápidamente a la nueva API.
¿Qué crees que el artículo tiene otras características que no deberían mencionarse o no estás de acuerdo con nuestro análisis? Por favor, comentenos, ¡este es el propósito de publicar!
Lo anterior es una compilación de la información sobre las nuevas características de Java 8. Continuaremos agregando información relevante en el futuro. ¡Gracias por su apoyo para este sitio web!