1. Historia de las versiones de Java

La historia de Java comienza en 1991, cuando un grupo de programadores de Sun decidió crear un lenguaje para pequeños dispositivos: controles remotos de TV, cafeteras, tostadoras, tarjetas bancarias, etc.

Los fabricantes de estos dispositivos usaban procesadores muy diferentes para controlar sus productos, por lo que se volvió muy importante estar vinculado a la arquitectura de un procesador o sistema operativo en particular.

Los creadores de Java decidieron dividir el problema en dos partes: sus programas no se compilarían en el código de máquina para un procesador específico, sino en un código intermedio especial. A su vez, ese código intermedio sería ejecutado por un programa especial llamado máquina virtual .

La mayoría de los programadores se refieren a una computadora como una máquina.

Interesante.

C ++ se tomó como base para el lenguaje Java y se simplificó y estandarizó en gran medida. Si C++ te permite hacer algo de 10 maneras, entonces Java retiene solo una de ellas. En cierto modo, fue como la transición de los jeroglíficos a un alfabeto.

La primera versión de Java se lanzó en 1996. Desde ese momento, Java comenzó su marcha triunfal alrededor del mundo, lo que, a su vez, estimuló la evolución y el crecimiento del propio lenguaje. Hoy en día, millones de bibliotecas y miles de millones de líneas de código están escritas en Java, y se lanzan nuevas versiones de Java cada 6 meses:

Nombre Año Número de clases
JDK 1.0 1996 211
JDK 1.1 1997 477
J2SE 1.2 1998 1,524
J2SE 1.3 2000 1,840
J2SE 1.4 2002 2,723
J2SE 5.0 2004 3,279
Java SE 6 2006 3,793
Java SE 7 2011 4,024
Java SE 8 2014 4,240
Java SE 9 2017 6,005
Java SE 10 2018 6,002
Java SE 11 2018 4,411
Java SE 12 2019 4,433
Java SE 13 2019 4,515

Aunque las versiones de Java se lanzaron con regularidad, no todas tenían la misma importancia para los programadores: Java ha evolucionado a pasos agigantados.


2.Java2

El primer gran salto se produjo con el lanzamiento de JDK 1.2. Tenía tantas innovaciones allí que los creadores de Java lo renombraron Java 2 Platform Standard Edition o J2SE 1.2 para abreviar.

Las principales novedades fueron:

  • strictfppalabra clave
  • La biblioteca Swing para trabajar con gráficos
  • El compilador JIT, que aceleró la ejecución de programas Java
  • Un gran conjunto de colecciones.
  • Compatibilidad total con Unicode: japonés, chino y coreano.

Hoy en día, estas innovaciones no parecen tan grandes, pero todo gran proyecto surge de uno pequeño. Java no sería tan popular hoy en día si un pequeño grupo de programadores no hubiera seguido mejorando el lenguaje hace 20 años.


3.Java 5

JDK 1.5 se lanzó en septiembre de 2004. También introdujo muchas novedades, por lo que no podía dejar de merecer un nuevo nombre: en lugar de las versiones 1.5, 1.6 y 1.7, decidieron usar 5.0, 6.0 y 7.0. Entonces, el nombre completo de JDK 1.5 era Java 2 Standard Edition 5.0

Esta actualización incluía elementos sin los cuales no habría sido posible un mayor desarrollo del lenguaje.

anotaciones _ La mitad de los principales marcos modernos se basan en anotaciones, desde Spring e Hibernate hasta JUnit.

genéricos _ Los genéricos han llevado el poder de las colecciones (y mucho más) a nuevas alturas. El código se ha vuelto más simple, más compacto y más seguro.

Autoboxing/unboxing es una conversión automática entre tipos primitivos y sus tipos de contenedor. Esto hizo que fuera mucho más fácil escribir y leer código, e hizo que las colecciones fueran aún más populares.

El foreachbucle ahora representa al menos la mitad de todos los bucles que escriben los programadores. Y, por supuesto, es indispensable cuando se trabaja con colecciones.

La enumeración es otra buena característica nueva. Permite que muchas cosas se simplifiquen maravillosamente.

Estas no son todas las novedades: se agregaron cientos de nuevas clases. Lo importante es que fueron las innovaciones correctas y dieron otro poderoso impulso a la popularidad de Java.


4.Java6

Java 6 es recordado por una gran cantidad de pequeñas mejoras y el abandono del número 2 en el nombre: ya no era "Java 2 Standard Edition 6.0", sino simplemente "Java Standard Edition 6.0".

Estas son algunas de las innovaciones interesantes:

La API del compilador de Java hizo posible llamar al compilador de Java directamente desde el código. Eso significa que su programa ahora podría generar texto que represente el código de clase, compilarlo llamando a los métodos de la API del compilador de Java y luego comenzar a llamar inmediatamente a los métodos de la clase compilada. Hay áreas enteras de desarrollo donde esta habilidad simplifica enormemente la vida.

Se hizo posible ejecutar JavaScript directamente dentro de un programa Java. Esta función apareció porque JavaSE 6 incluía el motor Rhino JavaScript.


5.Java7

Java 7 se lanzó en julio de 2011. Se suponía que habría muchas mejoras, pero los programadores solo lograron agregar una pequeña parte de lo que estaba planeado. En particular, agregaron cosas como:

Una nueva biblioteca para trabajar con entrada y salida de datos. Conocida como la Nueva API de entrada y salida , se encuentra en el java.niopaquete.

La inferencia de tipos automática del compilador de Java en tiempo de compilación permite a los programadores escribir menos código. El compilador se volvió más inteligente, y eso fue solo el comienzo.

La declaración de cambio ganó la capacidad de usar cadenas como valores de caso.

La gestión automática de recursos también mejoró significativamente: con la try-with-resourcesconstrucción, un programa Java puede cerrar los flujos de datos cuando ya no los necesite.

Hubo muchos otros cambios, pero no son tan importantes en nuestra etapa actual de aprendizaje de Java.


6.Java8

Java 8 salió en marzo de 2014 y fue la actualización más reciente de Java.

Sobre todo, los programadores lo recuerdan por la adición de expresiones lambda e interfaces funcionales (la @FunctionalInterfaceanotación). Los examinaremos en el Nivel 21. Su código nunca volverá a ser el mismo.

También se agregaron flujos para colecciones que, en combinación con expresiones lambda, hicieron posible escribir código de manera mucho más compacta. Aunque no siempre mucho más legible.

Interesante.

Y el tercer gran cambio fue la introducción de Java 8 de una API completamente nueva para trabajar con fechas y horas: la API Date Time . Lo estudiaremos en un futuro próximo.


7.Java 9

Java 9 se lanzó en septiembre de 2017. Desde entonces, los creadores de Java han decidido lanzar nuevas versiones con más frecuencia, cada seis meses. Probablemente quedaron impresionados por el enfoque adoptado por los desarrolladores del navegador Google Chrome.

El lanzamiento de Java 9 se centró más en las partes internas de la máquina Java. Lo más significativo que aportó a los programadores ordinarios fue la capacidad de dividir un programa en módulos. Esto es muy conveniente cuando tiene decenas de miles de clases o cuando su código descarga complementos dinámicamente.

Pero probablemente nos será de poca utilidad en un futuro próximo.


8.Java 11

Seis meses después del lanzamiento de Java 9, salió Java 10, y otros seis meses después, salió Java 11.

Se realizaron muchas pequeñas mejoras durante este tiempo, pero lo más probable es que solo recuerde dos:

Agregó soporte para Unicode 10. Ahora puede usar emojis en sus programas Java. Puede trabajar con ellos de la misma manera que trabaja con el tipo booleano:

Se mejoró la inferencia de tipos y apareció la varpalabra clave , que seguro te gustará.

Ahora puedes escribir lo siguiente:

var str = "Hello";

Y el compilador convierte esto a:

String str = "Hello";

Pero también hubo algunas pérdidas. Los creadores de Java eliminaron bibliotecas como JavaFX, Java EE y CORBA de JDK 11.


9. Importancia de la compatibilidad

Cuando se lanza una nueva versión, los programadores a menudo quieren comenzar desde cero. Después de todo, ¿quién quiere corregir un montón de errores antiguos cuando está absolutamente seguro de cómo debería haberse escrito el código desde el principio?

Pero la historia no apoya tal enfoque. Cada vez que los programadores lanzan una nueva versión de un programa, el 90% de sus usuarios están usando una versión antigua. Pueden usar o ignorar las nuevas características del programa, pero lo que odian los usuarios es cuando algo que solía funcionar bien deja de funcionar.

Muchos grandes productos han muerto cuando los programadores lanzaron nuevas versiones que no eran compatibles. O simplemente cuando hicieron cambios importantes. Por ejemplo, la idea de abandonar el botón Inicio en Windows 8 no atraía a los usuarios. El lanzamiento de Windows 10 recuperó la mitad de lo que se eliminó en Windows 8.

Además, Windows le permite ejecutar programas escritos hace 20 años para Windows 95 o incluso escritos hace 30 años para MS DOS 3.0: funcionarán. Esta es una de las razones por las que Windows sigue siendo popular.

Y Java no sería tan popular como lo es si a sus desarrolladores no les importara la compatibilidad. Cada vez que hay una nueva versión de la máquina Java, una nueva versión del SDK o cambios importantes en las clases, todo el código Java escrito desde enero de 1996 sigue funcionando.

Esto generalmente se logra simplemente agregando nuevos métodos, clases y paquetes, sin eliminar nada. Este enfoque tiene sus pros y sus contras.

Por un lado, Java arrastra un montón de equipaje en forma de código antiguo, subóptimo e innecesario. Por otro lado, su proyecto escrito en Java 11 siempre puede usar una biblioteca escrita en Java 8 que use bibliotecas escritas en Java 5 y Java 2. Esta mezcolanza de código funcionará perfectamente.

Con el lenguaje C++, las bibliotecas compiladas para plataformas de 32 y 64 bits no se pueden usar en el mismo proyecto. Y tendrá un gran dolor de cabeza si de repente descubre que el chartipo usado en una biblioteca usa un byte, mientras que otra usa dos bytes.


10. Obsoleto

Entonces, los creadores de Java decidieron no eliminar nada, solo agregar nuevas clases y paquetes. Pero, ¿cómo les hacen saber a los programadores que existe una nueva alternativa valiosa a una solución subóptima existente?

Para hacer esto, se les ocurrió la @Deprecatedanotación.

Si algún método o clase está en desuso, esta anotación se agrega junto a su declaración. Significa que se desalienta a los programadores a usar el código.

Todavía puede usar una clase o método en desuso, pero no se recomienda.

¿Y con qué frecuencia la gente hace cosas que no se recomiendan? Casi siempre 🙂

Muchas clases han quedado en desuso durante 20 años: se han utilizado y se siguen utilizando. La gente está familiarizada con ellos o simplemente son convenientes. Pero existe el riesgo de que se eliminen en algún momento, por lo que es mejor no usarlos.

Todos los IDE modernos, incluido IntelliJ IDEA, pueden manejar la @Deprecatedanotación. Los nombres de las clases y los métodos en desuso se muestran con formato tachado . Algo como esto:

Date date = new Date();
int day = date.getDay();

Las clases en desuso son muy populares y se encuentran a menudo en el código, por lo que veremos algunas de ellas pronto.