Guía de versiones y características de Java

Guía de versiones y características de Java

Java 8, Java 11, Java 13 — ¿Cuál es la diferencia?

Puede utilizar esta guía para encontrar e instalar la última versión de Java, comprender las diferencias entre las distribuciones de Java (AdoptOpenJdk, OpenJDK, OracleJDK, etc.), así como obtener una visión general de las características del lenguaje Java, incluidas las versiones de Java 8-13.,

también te puede gustar: más allá de Java 8

información de fondo

primero, echemos un vistazo a algunas preguntas comunes y prácticas que la gente tiene cuando intenta elegir la versión de Java correcta para su proyecto.

si desea obtener más información sobre una versión específica, vaya al sitio AdoptOpenJDK, elija la última versión de Java, descárguela e instálela. A continuación, volver a esta guía para y todavía aprender una cosa o dos sobre diferentes versiones de Java.

¿qué versión de Java debo usar?,

a partir de septiembre de 2019, Java 13 es la última versión de Java lanzada, con versiones más nuevas cada 6 meses: Java 14 está programada para marzo de 2020, Java 15 para septiembre de 2020, y así sucesivamente. En el pasado, los ciclos de lanzamiento de Java eran mucho más largos, ¡hasta 3-5 años!.

Con tantas nuevas versiones que salen, Básicamente hay estos escenarios de uso del mundo real:

  • Los proyectos heredados en las empresas a menudo se atascan usando Java 8 (consulte «¿Por qué las empresas todavía se atascan en Java 8?»sección INFRA). Por lo tanto, se verá obligado a utilizar Java 8 también.,
  • Algunos proyectos heredados incluso están atascados en Java 1.5 (lanzado en 2004) o 1.6 (lanzado en 2006) — lo siento, amigos!
  • si se está asegurando de utilizar los últimos IDEs, frameworks y herramientas de compilación e iniciar un proyecto totalmente nuevo, puede, sin dudarlo, usar Java 11 (LTS) o incluso el último Java 13.
  • Existe el campo especial de desarrollo de Android donde la versión de Java está básicamente atascada en Java 7, con un conjunto específico de características de Java 8 disponibles. O bien, puede cambiar a usar el lenguaje de programación Kotlin.

¿por qué las empresas siguen atascadas en Java 8?,

hay una mezcla de diferentes razones por las que las empresas todavía están atascadas con Java 8. Por nombrar algunas:

  • Herramientas de compilación (Maven, Gradle, etc.) y algunas bibliotecas inicialmente tenían errores con versiones Java versiones > 8 y necesitaban actualizaciones. Incluso hoy en día, con, por ejemplo, Java 9+, ciertas herramientas de compilación imprimen»acceso reflexivo «-advertencias al compilar proyectos Java, que simplemente» se siente no listo», a pesar de que las compilaciones están bien.
  • hasta Java 8, prácticamente estaba usando las compilaciones JDK de Oracle y no tenía que preocuparse por las licencias., Sin embargo, Oracle cambió el esquema de licencias en 2019, lo que hizo que Internet se volviera loco diciendo que «Java ya no es gratis», y siguió una buena cantidad de confusión. Sin embargo, esto no es realmente un problema, que aprenderá en la sección «distribuciones Java» de esta guía.
  • Algunas empresas tienen políticas para usar solo versiones LTS y confiar en sus proveedores de sistemas operativos para proporcionarles estas compilaciones, lo que lleva tiempo.

para resumir las cosas, tiene una mezcla de problemas prácticos (actualizar sus herramientas, bibliotecas, marcos) y problemas políticos.,

por qué algunas versiones de Java se llaman 1.¿X?

Las versiones de Java anteriores a la 9 simplemente tenían un esquema de nombres diferente. Por lo tanto, Java 8 también se puede llamar 1.8, Java 5 se puede llamar 1.5, etc. Cuando emitió el comando java -version con estas versiones, obtuvo una salida como esta:

esto simplemente significa Java 8. Con el cambio a versiones basadas en tiempo con Java 9, el esquema de nombres también cambió, y las versiones de Java no tienen el prefijo 1.x más. Ahora, el número de versión se ve así:

¿Cuál es la diferencia entre las versiones de Java?, Debo Aprender Uno Específico?

viniendo de otros lenguajes de programación con grandes roturas entre versiones, como por ejemplo Python 2 a 3, es posible que se pregunte si lo mismo se aplica a Java.

Java es especial en este sentido, ya que es extremadamente compatible con versiones anteriores. Esto significa que su programa Java 5 u 8 está garantizado para ejecutarse con una máquina virtual Java 8-13 — con algunas excepciones que no necesita preocuparse por ahora.

obviamente no funciona al revés, digamos que su programa se basa en características de Java 13 que simplemente no están disponibles bajo una JVM Java 8.,

Esto significa un par de cosas:

  • no sólo «aprender» una determinada versión de Java, como Java 12.
  • más bien, obtendrá una buena base en todas las características del lenguaje hasta Java 8.
  • y luego, puedes aprender, de una guía como esta, Qué características adicionales vinieron en Java 9-13 y usarlas siempre que puedas.

¿Cuáles son los ejemplos de estas nuevas características entre las versiones de Java?

eche un vistazo a la sección «Características de Java 8-13» a continuación.,

pero como regla general: los ciclos de lanzamiento más antiguos y largos (3-5 años, hasta Java 8) significaban muchas características nuevas por lanzamiento.

el ciclo de lanzamiento de seis meses significa menos características por versión, por lo que puede ponerse al día rápidamente con las características del lenguaje Java 9-13.

¿Cuál es la diferencia entre un JRE y un JDK?

hasta ahora, solo hemos estado hablando de » Java.»Pero, ¿qué es Java exactamente?

primero, debe diferenciar entre un JRE (Java Runtime Environment) y un JDK (Java Development Kit).,

históricamente, solo descargaba un JRE si solo estaba interesado en ejecutar programas Java. Un JRE incluye, entre otras cosas, la máquina virtual Java (JVM) y la herramienta de línea de comandos «java».

para desarrollar nuevos programas Java, necesitabas descargar un JDK. Un JDK incluye todo lo que el JRE tiene, así como el compilador javac y un par de otras herramientas como javadoc (Java documentation generator) y jdb (Java Debugger).

Ahora, ¿Por qué estoy hablando en pasado?,

hasta Java 8, el Sitio Web de Oracle ofrecía jres y JDKs como descargas separadas, a pesar de que el JDK también siempre incluía un JRE en una carpeta separada. Con Java 9, esa distinción básicamente se había ido, y siempre estás descargando un JDK. La estructura de directorios de JDKs también cambió, al no tener una carpeta JRE explícita más.

por lo tanto, a pesar de que algunas distribuciones (consulte la sección «distribuciones Java») todavía ofrecen una descarga JRE separada, parece haber la tendencia de ofrecer solo un JDK. Por lo tanto, vamos a usar Java y JDK indistintamente a partir de ahora.,

¿Cómo instalo Java o un JDK entonces?

Ignore las imágenes de Java-Docker, .envoltorios msi, o paquetes específicos de la plataforma por el momento. Al final, Java es solo una .archivo zip; nada más, nada menos.

por lo tanto, todo lo que necesita hacer para instalar Java en su máquina es descomprimir su jdk-{5-13}.archivo zip. Ni siquiera necesitas derechos de administrador para eso.,

su archivo Java descomprimido se verá así:

La magia ocurre en el directorio/bin, que bajo Windows, se ve así:

Directory C:\dev\jdk-11\bin...12.11.2019 19:23 272.736 java.exe...12.11.2019 19:23 20.832 javac.exe...

así que todo lo que necesita hacer es descomprimir ese archivo y poner el directorio / bin en su variable PATH, para que pueda llamar al comando ‘java’ desde cualquier lugar.

(en caso de que se lo pregunte, los instaladores GUI como el de Oracle o AdoptOpenJDK harán la descompresión y modificación de la variable PATH por usted, eso es todo.,)

para verificar que ha instalado Java correctamente, simplemente puede ejecutar java -version. Si la salida se parece a la de abajo, usted es bueno para ir!

ahora, queda una pregunta: ¿de dónde sacas ese Java ?archivo zip de? Lo que nos lleva al tema de las distribuciones.

distribuciones Java

Hay una variedad de sitios que ofrecen descargas Java (léase: JDK) y no está claro «quién ofrece qué y con qué licencias». Esta sección arrojará algo de luz sobre esto.,

El Proyecto OpenJDK

en términos de código fuente Java (léase: el código fuente de su JRE / JDK), solo hay uno viviendo en el sitio del proyecto OpenJDK.

esto es solo código fuente, sin embargo, no una compilación distribuible (piense: su.archivo zip con el comando java compilado para su sistema operativo específico). En teoría, tú y yo podríamos producir una compilación a partir de ese código fuente, llamarlo, digamos, MarcoJDK, y empezar a distribuirlo. Pero nuestra distribución carecería de certificación, para poder llamarnos legalmente compatibles con Java SE.,

Es por eso que, en la práctica, hay un puñado de proveedores que realmente crean estas compilaciones, las certifican (consulte TCK) y luego las distribuyen.

y aunque los proveedores no pueden, por ejemplo, eliminar un método de la clase String antes de producir una nueva compilación de Java, pueden agregar marca (¡yay!) o añadir algunas otras utilidades (por ejemplo, CLI) que consideren útiles. Pero aparte de eso, el código fuente original es el mismo para todas las distribuciones Java.

OpenJDK Builds (por Oracle) y OracleJDK Builds

uno de los proveedores que construye Java desde el código fuente es Oracle., Esto conduce a dos distribuciones Java diferentes, que pueden ser muy confusas al principio.

  1. OpenJDK builds by Oracle (!). Estas compilaciones son gratuitas y sin marca, pero Oracle no lanzará actualizaciones para versiones anteriores, digamos Java 13, tan pronto como salga Java 14.
  2. OracleJDK, que es una construcción comercial de marca que comienza con el cambio de licencia en 2019. Esto significa que se puede usar de forma gratuita durante el desarrollo, pero debe pagar a Oracle si lo usa en producción. Para esto, obtiene soporte más largo, es decir, actualizaciones de versiones y un número de teléfono al que puede llamar si su JVM se vuelve loco.,

ahora, históricamente (antes de Java 8), hubo diferencias reales de código fuente entre las compilaciones de OpenJDK y las compilaciones de OracleJDK, donde se podría decir que OracleJDK era ‘mejor’. Pero a partir de hoy, ambas versiones son esencialmente las mismas, con pequeñas diferencias.

a continuación, se reduce a que desea pagar, soporte comercial (un número de teléfono) para su versión instalada de Java.

AdoptOpenJDK

en 2017, un grupo de miembros del grupo de usuarios de Java, desarrolladores y Proveedores (Amazon, Microsoft, Pivotal, Red Hat y otros) iniciaron una comunidad llamada AdoptOpenJDK.,

proporcionan compilaciones OpenJDK gratuitas y sólidas con disponibilidad / actualizaciones más largas e incluso le ofrecen la opción de dos máquinas virtuales Java diferentes: HotSpot y OpenJ9.

le recomiendo si está buscando instalar Java.

Azul Zulu, Amazon Corretto, SAPMachine

encontrará una lista completa de compilaciones de OpenJDK en el sitio de OpenJDK Wikipedia. Entre ellos se encuentran Azul Zulu, Amazon Corretto, así como SapMachine, por nombrar algunos. Para simplificar en exceso, se reduce a que tiene diferentes opciones de soporte / garantías de mantenimiento.,

pero asegúrese de revisar los sitios web individuales para aprender sobre las ventajas de cada distribución individual.

recomendación

características de Java 8-13

como se mencionó al principio de esta guía: esencialmente todas las características del lenguaje Java 8 funcionan en Java 13. Lo mismo ocurre con todas las demás versiones de Java en el medio.

a su vez, esto significa que todas las características del lenguaje de Java 8 sirven como un buen conocimiento de la base de Java, y todo lo demás (Java 9-13) es más o menos características adicionales en la parte superior de esa línea de base.,

Aquí hay un resumen rápido de lo que las versiones específicas tienen para ofrecer:

Java 8

Java 8 fue una versión masiva y puede encontrar una lista de todas las características en el Sitio Web de Oracle. Hay dos conjuntos de características principales que me gustaría mencionar aquí:

características del lenguaje: Lambdas, etc.,

antes de Java 8, cada vez que quería instanciar, por ejemplo, un nuevo ejecutable, tenía que escribir una clase interna anónima, así:

 Runnable runnable = new Runnable(){ @Override public void run(){ System.out.println("Hello world !"); } };

con lambdas, el mismo código se ve así:

Runnable runnable = () -> System.out.println("Hello world two!");

también tiene referencias de métodos, anotaciones repetidas, métodos predeterminados para interfaces y algunas otras características del lenguaje.

Collections& Streams

en Java 8, también tiene operaciones de estilo funcional para colecciones, también conocidas como Stream API., Un ejemplo rápido:

List<String> list = Arrays.asList("franz", "ferdinand", "fiel", "vom", "pferd");

Ahora, pre-Java 8, básicamente había que escribir para bucles de hacer algo con esa lista.

con la API Streams, puede hacer lo siguiente:

list.stream() .filter(name -> name.startsWith("f")) .map(String::toUpperCase) .sorted() .forEach(System.out::println);

Java 9

Java 9 también fue una versión bastante grande, con un par de adiciones:

Collections

Collections tiene un par de nuevos métodos auxiliares para construir fácilmente listas, conjuntos y mapas.,

List<String> list = List.of("one", "two", "three");Set<String> set = Set.of("one", "two", "three");Map<String, String> map = Map.of("foo", "one", "bar", "two");

Streams

Streams got a couple of additions, in the form of takeWhile, dropWhile, and iterate methods.

Stream<String> stream = Stream.iterate("", s -> s + "s") .takeWhile(s -> s.length() < 10);

Optionals

Optionals got the sorely missed ifPresentOrElse method.,

user.ifPresentOrElse(this::displayAccount, this::displayLogin);

Interfaces

Interfaces got private métodos:

public interface MyInterface { private static void myPrivateMethod(){ System.out.println("Yay, I am private!"); }}

otras características del lenguaje

y un par de otras mejoras, como una instrucción try-with-resources mejorada o extensiones de operador de diamante.

JShell

finalmente, Java tiene un shell donde puedes probar comandos simples y obtener resultados inmediatos.

% jshell| Welcome to JShell -- Version 9| For an introduction type: /help introjshell> int x = 10x ==> 10

HTTPClient

Java 9 trajo la inicial versión preliminar de un nuevo HttpClient., Hasta entonces, el soporte Http integrado de Java era bastante bajo, y tenía que recurrir al uso de bibliotecas de terceros como Apache HttpClient u OkHttp (que son excelentes bibliotecas, por cierto!).

con Java 9, Java tiene su propio cliente moderno, aunque está en modo de vista previa, lo que significa que está sujeto a cambios en versiones posteriores de Java.

Project Jigsaw: Java Modules and Multi-Release jar Files

Java 9 consiguió el sistema de Módulos Jigsaw, que se parece un poco a la vieja Especificación OSGI., No está en el alcance de esta guía entrar en detalles completos sobre Jigsaw, pero eche un vistazo a los enlaces anteriores para obtener más información.

multi-Release .los archivos jar hicieron posible tener uno .archivo jar que contiene diferentes clases para diferentes versiones de JVM. Por lo tanto, su programa puede comportarse de manera diferente/tener diferentes clases utilizadas cuando se ejecuta en Java 8 vs.Java 10, por ejemplo.

Java 10

ha habido algunos cambios en Java 10, como recolección de basura, etc., Pero el único cambio real que usted como desarrollador probablemente verá es la introducción de la palabra clave var, también llamada inferencia de tipo de variable local.

local-variable Type Inference: var-keyword

// Pre-Java 10String myName = "Marco";// With Java 10var myName = "Marco"

Se siente Javascript-y, ¿no? Sin embargo, todavía está fuertemente escrito, y solo se aplica a las variables dentro de los métodos (gracias, dpash, por señalar eso nuevamente).

Java 11

Java 11 también fue una versión algo más pequeña, desde la perspectiva del desarrollador.,

Strings& Files

Strings and files tiene un par de métodos nuevos (no todos listados aquí):

Run Source Files

a partir de Java 10, puede ejecutar archivos fuente Java sin tener que compilarlos primero. Un paso hacia el scripting.

ubuntu@DESKTOP-168M0IF:~$ java MyScript.java

Locales-Variable Tipo de Inferencia (var) para los Parámetros Lambda

El encabezado lo dice todo:

(var firstName, var lastName) -> firstName + lastName

HttpClient

El HttpClient de Java 9 en su final, no-versión preliminar.,

otras golosinas

Flight Recorder, No-Op Garbage Collector, Nashorn-Javascript-Engine obsoleto, etc.

Java 12

Java 12 tiene un par de nuevas características y limpiezas, pero las únicas que vale la pena mencionar aquí son el Soporte de Unicode 11 y una vista previa de la nueva expresión switch, que verá en la siguiente sección.

Java 13

puede encontrar una lista completa de características aquí, pero esencialmente, está obteniendo Unicode 12.,1 soporte, así como dos funciones de vista previa nuevas o mejoradas (sujetas a cambios en el futuro):

cambiar expresión (vista previa)

cambiar expresiones ahora puede devolver un valor., Y puede usar una sintaxis de estilo lambda para sus expresiones, sin los problemas de interrupción/interrupción:

las instrucciones de switch antiguas se veían así:

switch(status) { case SUBSCRIBER: // code block break; case FREE_TRIAL: // code block break; default: // code block}

mientras que con Java 13, las instrucciones de switch pueden verse así:

cadenas multilíneas (vista previa)

finalmente puede hacer esto en Java:

Java 14 y posteriores

se cubrirán aquí, tan pronto como se publiquen. ¡Vuelve pronto!,

conclusión

Por ahora, debería tener una visión general bastante buena de un par de cosas:

  • Cómo instalar Java, qué versión obtener y de dónde obtenerla (sugerencia: AdoptOpenJDK).
  • Qué es una distribución Java, cuáles existen y cuáles son las diferencias.
  • Cuáles son las diferencias entre versiones específicas de Java.

¡los Comentarios, las correcciones y las entradas aleatorias siempre son bienvenidos! Simplemente deja un comentario abajo.

Gracias por leer!

hay más de donde vino

Este artículo apareció originalmente en www.marcobehler.,com / escrito como parte de una serie de guías sobre programación Java moderna. Para encontrar más guías, visite el sitio web o suscríbase al boletín para recibir notificaciones de guías recién publicadas: https://bit.ly/2K0Ao4F.

agradecimientos

Stephen Colebourne escribió un fantástico artículo sobre las diferentes distribuciones Java disponibles. Gracias, Stephen!

más información

JVM Ecosystem Survey: Why Devs are not Switching to Java 11

Beyond Java 8

When Will Java 11 Replace Java 8 as the Default Java?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *