Java (lenguaje de programación)

Lenguaje de programación Java
AutorJames Gosling ,
Sun Microsystems
Fecha de origen23 de mayo de 1995
Ultima versión18 [1]
UsoPropósito general
ParadigmasOrientado a objetos
MecanografíaAlto
Especificaciones de idiomaLa especificación del lenguaje Java, Java SE 17
Extensiones comunes.jar, .java, .clase
Influenciado porSimula , Ada 83 , C ++ , Eiffel , Java genérico , Mesa , Modula-3 , Oberon , Objective-C , UCSD Pascal , Smalltalk
InfluyóAda 2005 , BeanShell , C# , Clojure , D , ECMAScript , Groovy , J# , JavaScript , PHP , Python , Scala , Seed7 , Vala
Implementación de referencia
Implementaciónintérprete con JITter
Sistema operativoWindows , Linux , mac OS
LicenciaLicencia Pública General GNU , Proceso de la Comunidad Java
Sitio webDesarrolladores Oracle Tecnología Java

En informática, Java es un lenguaje de programación de alto nivel , orientado a objetos y tipado estático , que se apoya en la plataforma de software de ejecución homónima , diseñada específicamente para ser lo más independiente posible de la plataforma de hardware de ejecución ( compilando en bytecode antes e interpretando luego por una JVM ) (aunque esta característica implica un rendimiento en términos de cómputo inferior a los de lenguajes directamente compilados como C y C++ o por lo tanto perfectamente adaptados a la plataforma hardware).

Historia

Java se creó a partir de una investigación realizada en la Universidad de Stanford a principios de la década de 1990 . En 1992 nació el lenguaje Oak (en italiano "oak"), producido por Sun Microsystems y creado por un grupo de expertos desarrolladores liderado por James Gosling . [2] Este nombre se cambió más tarde a Java (una variedad de café de Indonesia ; el logotipo adoptado es una taza para esta bebida) debido a problemas de derechos de autor : el lenguaje de programación Oak ya existía. [3]

Para facilitar la transición a Java a los programadores a la antigua , en particular a los vinculados a lenguajes como C++ , la sintaxis básica ( estructuras de control , operadores , etc.) se ha mantenido casi idéntica a la de C++ [4 ] [5] ; sin embargo, a nivel de lenguaje, no se han introducido funcionalidades que se consideren fuente de complejidad innecesaria y que favorezcan la introducción de ciertos bugs durante la programación, como la aritmética de punteros y la herencia de múltiples clases. [6] Para las características orientadas a objetos del lenguaje nos inspiramos en C++ y sobre todo en Objective C. [7]

En un principio, Sun decidió utilizar este nuevo producto para crear aplicaciones complejas para pequeños dispositivos electrónicos; Fue solo en 1993 con la explosión de Internet que Java comenzó a hacerse notar como una herramienta para comenzar a programar para Internet. Al mismo tiempo, Netscape Corporation anunció la elección de equipar su entonces homónimo y famoso navegador con Java Virtual Machine (JVM). Esto marca una revolución en el mundo de Internet: gracias a los applets , las páginas web se volvieron interactivas a nivel de cliente, es decir, las aplicaciones se ejecutan directamente en la máquina del usuario de Internet y no en un servidor remoto. Por ejemplo, los usuarios pueden jugar juegos directamente en las páginas web y aprovechar los chats dinámicos e interactivos.

Java se anunció oficialmente el 23 de mayo de 1995 en SunWorld. El 13 de noviembre de 2006 , Sun Microsystems lanzó su implementación del compilador Java y la máquina virtual bajo la licencia GPL . No todas las plataformas Java son gratuitas. El entorno Java gratuito se llama IcedTea. [8] El 8 de mayo de 2007 , Sun también liberó las librerías, excepto algunos componentes que no le pertenecen, bajo la licencia GPL, convirtiendo a Java en un lenguaje de programación cuya implementación de referencia es libre. [9] El lenguaje está definido por un documento llamado The Java Language Specification, a menudo abreviado JLS . La primera edición del documento se publicó en 1996. [10] Desde entonces, el lenguaje ha sufrido numerosos cambios y adiciones, añadidas de vez en cuando en ediciones posteriores. A finales de 2018, la versión más reciente de la especificación es Java SE 11 Edition . [10]

Descripción

Principios

Java se creó con cinco propósitos principales: [11]

  1. ser "simple, orientado a objetos y familiar";
  2. ser "robusto y seguro";
  3. ser independiente de la plataforma ;
  4. contener herramientas de red y bibliotecas ;
  5. estar diseñado para ejecutar código de fuentes remotas de forma segura.

Idioma

Uno de los principios fundamentales del lenguaje se expresa mediante el lema WORA ( escribir una vez, ejecutar en cualquier lugar , es decir, "escribir una vez, ejecutar en cualquier lugar"): el código compilado que se ejecuta en una plataforma no tiene que volver a compilarse para ejecutarse en una plataforma diferente ; de hecho el producto de la compilación está en un formato llamado bytecode que puede ser ejecutado por cualquier implementación de un procesador virtual llamado Java Virtual Machine ; a partir de 2014 Java es uno de los lenguajes de programación más utilizados en el mundo, especialmente para aplicaciones cliente-servidor , con un número de desarrolladores estimado en alrededor de 9 millones. [12] [13] ; un buen punto de partida para aprender Java es el tutorial oficial [14] .

¡Hola Mundo!

A continuación se muestra el código fuente de un programa simple que imprime el texto " Hola mundo " en la consola .

clase holamundo { public static void main ( String [] args ) { sistema _ fuera _ println ( "Hola Mundo" ); } }

Un programa mínimo en Java debe contener necesariamente la definición de clase a través de la palabra clave class seguido del class_name y el método principal o main method así como el punto de entrada del programa en el que se invocan variables , objetos y métodos estáticos sobre variables y/o dinámico sobre los objetos.

En el ejemplo anterior, main contiene la instrucción para imprimir la cadena Hello World en la pantalla ; aunque es completamente funcional y fácil de entender, no se explota la filosofía orientada a objetos que normalmente se aplica a cualquier programa escrito en Java. A continuación se muestra el código fuente de un programa que realiza la misma tarea que el anterior utilizando programación orientada a objetos .

Mensaje de clase pública { cadena privada para imprimir ; Mensaje publico ( String print ) { esto _ paraImprimir = imprimir ; } impresión de vacío público () { sistema _ fuera _ println ( esto . aImprimir ); } public static void principal ( String args [] ) { Mensaje Hola Mundo = nuevo Mensaje ( "¡Hola Mundo!" ); hola mundo imprimir (); } }

El método main confía la impresión del mensaje a un objeto creado específicamente para esta tarea, sobre el cual se invoca el método de impresión dinámico definido antes del main junto con el constructor de la clase o ese método en particular (con el mismo nombre de la clase) que se utiliza para inicializar el atributo de clase ' toPrint del objeto creado / instanciado en main. Los métodos definibles pueden ser declarados privados (marcados con la palabra clave private ) si solo pueden ser llamados dentro de la misma clase o públicos (marcados con la palabra clave public ) si también pueden ser llamados por otras clases, de tipo estático (marcados con la palabra clave estática ) si se puede invocar libremente dentro de la clase (por ejemplo, en variables globales), dinámica si se puede invocar en objetos.

Al escribir nuevas clases que admitan la operación de impresión , uno puede adaptar el programa para mostrar mensajes de tipos radicalmente diferentes, dejando el principal casi sin cambios, cambiando solo la mitad de la línea que sigue al nuevo . Por ejemplo, puede considerar un mensaje escrito en una ventana que aparece en la pantalla de la computadora en uso, o una cadena enviada a través de una conexión de red para que aparezca en la ventana de una computadora cliente . O el programa puede hablar con el usuario en la línea de comando o en una ventana (considerando el diálogo como un "mensaje interactivo").

Es posible modificar radicalmente el comportamiento del programa con cambios limitados y en puntos predispuestos a priori ( polimorfismo ): el programa puede soportar actualizaciones y necesidades inesperadas. A continuación se muestra el código fuente de dos programas que muestran el mismo texto dentro de una ventana . El primero crea una ventana estándar donde se escribe la cadena ingresada como parámetro, mientras que el segundo programa crea una ventana respetando los parámetros (por ejemplo el tamaño de la ventana) insertados en el código.

importar javax.swing.JOptionPane ; clase pública HolaMundo { public static void main ( String [] args ) { JOptionPane . showMessageDialog ( null , "¡Hola mundo!" ); } } //HolaMundo.java paquete hola mundo ; importar javafx.application.Application ; importar javafx.event.ActionEvent ; importar javafx.event.EventHandler ; importar javafx.scene.Scene ; importar javafx.scene.control.Button ; importar javafx.scene.layout.StackPane ; importar javafx.stage.Stage ; La clase pública HelloWorld extiende la aplicación { @Anular inicio de vacío público ( Etapa etapa primaria ) { Botón btn = nuevo Botón (); btn _ setText ( "Di 'Hola mundo'" ); btn _ setOnAction ( new EventHandler < ActionEvent > () { @Anular controlador de vacío público ( evento ActionEvent ) { sistema _ fuera _ println ( "¡Hola mundo!" ); } }); StackPane raíz = nuevo StackPane (); raíz _ obtenerNiños (). añadir ( btn ); Escena escena = nueva escena ( raíz , 300 , 250 ); Etapa primaria . setTitle ( "¡Hola mundo!" ); Etapa primaria . setScene ( escenas ); Etapa primaria . mostrar (); } public static void main ( String [] args ) { lanzamiento ( argumentos ); } }

El código propuesto crea objetos que se utilizan para administrar la interfaz gráfica. Inicialmente se crea una ventana cuyo título es Hello World! ; dentro de esta ventana se inserta una etiqueta que contiene la palabra Hello World! . Finalmente, se establece el tamaño de la ventana que, finalmente, se hace visible junto con la etiqueta que lleva la escritura a mostrar. También en este código se utiliza la programación por objetos, pero de forma diferente: el principal desconoce los mecanismos necesarios para crear una interfaz gráfica en pantalla y estos se deciden por las clases JFrame y JLabel que se han preparado a priori ( encapsulación ) .

Sistema de tipos

Java es un lenguaje seguro de tipos , tipificado estáticamente , de tipo nominativo y de tipificación manifiesta . En virtud de estas características, generalmente se considera un lenguaje fuertemente tipado . El lenguaje distingue claramente los tipos primitivos que definen valores atómicos de los tipos estructurados que definen estructuras de datos compuestas. Los tipos primitivos también se denominan tipos atómicos y tipos básicos y se definen en las especificaciones del lenguaje: se conoce el conjunto exacto de valores permitidos y los operadores admitidos para cada uno.

Los tipos estructurados también son tipos de referencia , es decir, definen objetos y son clases o interfaces. Entre estos, las clases de matriz se definen en la especificación del lenguaje; todos los demás tipos estructurados son " definidos por el usuario ", es decir, por el programador. Los tipos definidos por el usuario que están vinculados al idioma por algún motivo se recopilan en el paquete java.langy sus subpaquetes; el lenguaje establece para algunos de ellos (,, Objecty Stringotros Iterable) reglas sintácticas o semánticas adicionales.

Los tipos de referencia incluyen clases para la gestión de cadenas, matrices y colecciones (listas, mapas, etc.).

Tipos basicos
Tipo Descripción Clase de contenedor
byte entero con signo de 8 bits Byte
corto entero con signo de 16 bits Corto
En t entero de 32 bits con signo Entero
largo entero con signo de 64 bits Largo
flotar Punto flotante de precisión simple de 32 bits ( estándar IEEE 754 ) Flotar
doble Punto flotante de doble precisión de 64 bits ( estándar IEEE 754 ) Doble
carbonizarse Carácter único Unicode (entero sin signo de 16 bits) Personaje
booleano trueofalse booleano

De todo esto se deduce que los valores de los tipos básicos no son objetos. Sin embargo, para cada tipo base hay una clase correspondiente, definida en la jerga como tipo contenedor o tipo contenedor , en el paquete java.lang, una clase que le permite encapsular un valor de tipo primitivo dentro de un objeto. Los métodos apropiados de la clase contenedora permiten obtener el objeto que encapsula un determinado valor y el valor encapsulado por un determinado objeto.

Desde la versión 5.0 en adelante, se admite el autoboxing y unboxing , lo que le permite convertir del tipo primitivo a la clase contenedora correspondiente y viceversa. El compilador, "detrás de escena", traduce la conversión en una invocación de método adecuada en la clase contenedora; por lo tanto, no es una conversión real, sino una sintaxis conveniente que "oculta" la creación de un objeto de la clase contenedora. Como muchos otros lenguajes de programación, Java también tiene arreglos entre las estructuras de datos ( ver arreglos en Java ).

Constantes

Los valores constantes en Java se identifican con la palabra clave: final seguido del tipo, nombre de la constante y el valor asignado:

final tipo_constante <nombre_constante> = valor;

ejemplo:

PRECIO doble final = 15,99 ;

Por convención, los nombres de las constantes están todos en mayúsculas.

Además, también es posible declarar final un método o una clase cuando desee evitar que el método se anule en una subclase en el primer caso o evitar que se cree una clase secundaria a partir de la clase en cuestión en el segundo caso.

Estructuras de datos

Estructuras de control

Se admiten las siguientes estructuras de control :

  • Estructuras selectivas: if ... elsey switch, como en C.
  • Estructuras iterativas:
    • whiley do ... whilecomo en C
    • forprestado de C
    • para cada uno actuando sobre una matriz o colección [15]
  • El manejo de excepciones en Java se maneja mediante una sintaxis try ... catch ... finallysimilar a la de C ++.

Más allá de las construcciones para la programación orientada a objetos, el resto de la sintaxis de Java se denomina como C , que se deriva o es similar a la del lenguaje C.

Orientación a objetos

Java es un lenguaje orientado a objetos . La idea detrás de la programación orientada a objetos es representar las entidades reales o abstractas que determinan la dinámica del problema resuelto por el software en forma de entidades unitarias, con un uso y operación específicos definidos a priori. Estas entidades se denominan objetos . Las especificaciones que definen las características de estas unidades y bajo las cuales se crean o instancian en la jerga se denominan clases .
Sin embargo, Java no es un lenguaje de objetos puro, sino solo orientado a objetos : por ejemplo, los valores de los tipos primitivos no son objetos.

En el lenguaje Java, los objetos tienen campos (también llamados atributos o variables de instancia o muestra ) y métodos . Los métodos generalmente se usan para implementar fácilmente muchas otras construcciones que algunos otros lenguajes proporcionan de forma nativa, como el manejo de eventos (implementado a través de oyentes ) o propiedades, implementado a través de métodos de acceso y, más generalmente, con objetos JavaBeans .

En Java no hay funciones: los bloques de código que "no pertenecen a ningún objeto" se implementan como métodos estáticos de una determinada clase y por lo tanto son siempre métodos. En Java hay un fuerte énfasis en la distinción entre interfaz e implementación de una clase u objeto: la primera es el conjunto de especificaciones públicas que pueden usar los usuarios de un determinado objeto, mientras que la segunda es el conjunto de estructuras internas e instrucciones ejecutables. que, en su conjunto, cumplen dichas especificaciones. El término interfaz también se utiliza con otro significado, que se explica a continuación.

Herencia

Se admite la herencia entre tipos . Esto le permite establecer la jerarquía de las clases que componen un programa. El lenguaje dicta que la clase conocida está a la cabeza de la jerarquía java.lang.Object. [dieciséis]

En Java, no hay herencia múltiple entre clases. [17] Por un lado, esta restricción permite una jerarquía de clases lineal y evita las desventajas que introduce la herencia múltiple. Por otro lado, se supera fácilmente haciendo uso de interfaces , es decir, tipos similares a las clases, pero diseñados específicamente para ser extendidos y sujetos a ciertas restricciones impuestas por el lenguaje. [18] [19] En consecuencia, proporcionan algunas ventajas de la herencia múltiple, como la posibilidad de que el mismo objeto pertenezca a diferentes tipos, sin las desventajas como la ambigüedad introducida por el hecho de que una clase puede heredar diferentes implementaciones de un mismo método. .

Desde la llegada de Java, la herencia única se ha establecido gradualmente como el modelo estándar de herencia en las tecnologías orientadas a objetos y también ha sido adoptada por los lenguajes de Microsoft .NET Framework . Desde Java 8 es posible explotar los métodos por defecto de las interfaces para construir una herencia múltiple limitada. Esto no afecta la herencia principal que permanece única, pero permite que los métodos se hereden de múltiples interfaces al mismo tiempo. [20]

Entornos de desarrollo

Para desarrollar programas en Java, cualquier editor de texto es teóricamente suficiente ; en la práctica, si quieres escribir algo más que el clásico hola mundo , necesitas un entorno de desarrollo integrado (IDE): existen varios IDE ( Integrated Development Environment ), algunos gratuitos y otros de pago.

Kit de desarrollo de Java

Sun (ahora Oracle ) proporciona un kit de desarrollo de software específico , llamado Java Development Kit (o JDK ), que incluye una serie de herramientas de uso común, incluidas, y javacotras , diseñadas para procesar ( compilar ) archivos fuentes y/o ya compilado, por lo que incluye Java Runtime Environment (JRE). Trabajan sobre el código ya escrito y guardado en el sistema: ninguno de ellos proporciona un entorno de escritura visual con esas características que son útiles en la creación de programas complejos como el resaltado de sintaxis a través de diferentes colores, el autocompletado o la capacidad de navegar entre fuentes. haciendo clic en el ratón . javadocjar

Entornos de desarrollo integrados

La propia Oracle ha impulsado el desarrollo de un entorno de desarrollo gratuito y de código abierto llamado NetBeans , que se puede descargar solo [21] , u (opcionalmente) con el JDK [22] .

  • Un entorno de desarrollo integrado de código abierto ampliamente utilizado es Eclipse , donado a la comunidad de desarrolladores por IBM y cuyo desarrollo es seguido por una gran comunidad de usuarios.
  • Uno de los entornos comerciales de desarrollo integrado más populares es JBuilder producido por Borland .
  • Un entorno de desarrollo integrado que ha ganado múltiples premios [23] es IntelliJ IDEA .
  • Un entorno de desarrollo gratuito y sobre todo ligero para Java es BlueJ, con un claro enfoque didáctico.
  • Otro entorno de desarrollo integrado para Java es JCreator , cuyas ventajas son sobre todo la sencillez de la interfaz y la ligereza.
  • Un entorno de desarrollo para Java (y otros lenguajes de programación) es Visual Studio Code : software libre y gratuito , aunque la versión oficial está bajo licencia propietaria .

Entorno de ejecución

Plataforma Java

Los programas escritos en lenguaje Java, luego de una fase inicial de compilación con la obtención del llamado bytecode , están destinados a ser ejecutados en la plataforma Java a través de una fase de interpretación (por este motivo el lenguaje Java también se denomina semiinterpretado) por una Máquina Virtual Java . y en ejecución tienen acceso a las API de la biblioteca estándar . Estos dos pasos proporcionan un nivel de abstracción que permite que las aplicaciones sean totalmente independientes del sistema de hardware en el que se ejecutarán. Una implementación de la plataforma java es el Java Runtime Environment (JRE), necesario para la ejecución del programa compilado, mientras que para el desarrollo de programas en Java a partir del código fuente, el Java Development Kit (JDK) que también incluye el JRE .

Portabilidad

La ejecución de programas escritos en Java debe tener un comportamiento similar en diferentes contextos de ejecución. Para lograrlo, trabajamos en diferentes niveles y el primero de ellos es, por supuesto, el lenguaje que ha sido especialmente diseñado para este propósito. Por ejemplo, proporciona una sintaxis unificada para definir secciones críticas , una tarea que en otros lenguajes se suele realizar utilizando bibliotecas de terceros o primitivas del sistema. [24] Además, prácticamente no deja lugar para un comportamiento indefinido o un comportamiento dependiente de la implementación del entorno de ejecución.

La especificación del lenguaje requiere un entorno de ejecución que supervise la ejecución del programa y prohíba ciertas operaciones que de otro modo no serían seguras. Hacen referencia explícita a la Máquina Virtual Java , indicándola como el destinatario típico del bytecode producido por la compilación inicial de un programa Java, y de hecho el compilador javacincluido en el JDK compila precisamente en bytecode. Sin embargo, es posible compilar hacia diferentes arquitecturas, de hecho, es posible producir un código objeto específico de un determinado sistema operativo utilizando un compilador especial, por ejemplo, la colección de compiladores GNU .

En principio, debería poder escribir el programa solo una vez y ejecutarlo en todas partes, de ahí el famoso eslogan de Sun: "escribe una vez, ejecuta en todas partes". La portabilidad es un objetivo técnicamente difícil de lograr, y el éxito de Java en esta área es motivo de controversia. Si bien es posible escribir programas en Java que se comporten de manera consistente en muchas plataformas de hardware diferentes , estas dependen de máquinas virtuales que son programas en sí mismas y que inevitablemente tienen sus propios errores , diferentes entre sí: esto es una parodia de Sun. nació el eslogan "Escribir una vez, ejecutar en todas partes", que se convirtió en "Escribir una vez, depurar en cualquier lugar " . [25]

Bibliotecas

Versiones de la plataforma

El lenguaje en sí define solo una pequeña parte de las bibliotecas que se pueden usar en combinación con el lenguaje en sí. El resto lo define la plataforma en la que se ejecuta el programa. Oracle proporciona tres plataformas oficiales, cada una destinada a diferentes áreas:

Bibliotecas de terceros

Además, el programador puede utilizar un número arbitrario de bibliotecas de terceros. Estas bibliotecas, contenidas en varios paquetes , son utilizadas por el programador para usar ciertos métodos o atributos comunes para simplificar y estandarizar los programas y hacerlos más legibles para los programadores. Hay muchos paquetes que pueden usar los programadores en el lenguaje Java . Por ejemplo, hay paquetes:

Documentación

Las especificaciones del lenguaje no imponen una sintaxis determinada para la documentación de las fuentes, sin embargo, con el tiempo la reconocida por la herramienta Javadoc y regulada por especificaciones oficiales bien definidas (aunque externas al lenguaje) se ha convertido en el formato estándar [26] . Este estándar establece que la documentación se proporciona dentro de comentarios insertados directamente en las fuentes y equipados con un formato especial, que es ignorado por el compilador, pero reconocido por herramientas especializadas. Esto facilita la actualización de la documentación, ya que acompaña directamente al elemento sintáctico marcado por ella; además, al leer las fuentes de un programa, esto le permite tener una visión general de las especificaciones y la implementación del elemento del programa que se está considerando.

Otra herramienta útil para la documentación son las anotaciones , introducidas en la tercera versión de la especificación del lenguaje [27] . Si bien tienen una sintaxis formalmente diferente de los comentarios de Javadoc, se utilizan con el mismo propósito, es decir, para proporcionar metadatos que describen las entidades del programa marcadas. Sin embargo, mientras que los comentarios informan especificaciones de manera discursiva (aunque estructurada), las anotaciones, por su propia naturaleza, son ideales para el procesamiento con herramientas, más que para la lectura humana. Además, bajo las condiciones adecuadas [28] , la información que proporcionan se compila junto con el código e incluso se puede leer en tiempo de ejecución , lo que no pueden hacer los comentarios.

Versiones

En septiembre de 2017, Mark Reinhold, arquitecto jefe de la plataforma Java, propuso cambiar el plan de lanzamiento de un lanzamiento cada dos años a los seis meses actuales. Sin embargo, no todas las versiones cuentan con soporte extendido (LTS - Long Term Support), estas últimas se lanzan cada 3 años, actualmente la versión 17, 11 y 8 son LTS.

Versión Fecha de lanzamiento Fin de
las actualizaciones públicas gratuitas [29] [30] [31] [32]
Soporte extendido
hasta
La versión anterior ya no es compatible:Beta de JDK 1995 ? ?
La versión anterior ya no es compatible:JDK 1.0 enero de 1996 ? ?
La versión anterior ya no es compatible:JDK 1.1 febrero de 1997 ? ?
La versión anterior ya no es compatible:J2SE 1.2 Zona de juegos diciembre de 1998 ? ?
La versión anterior ya no es compatible:J2SE 1.3 Cernícalo mayo de 2000 ? ?
La versión anterior ya no es compatible:J2SE 1.4 Merlín febrero de 2002 octubre de 2008 febrero de 2013
La versión anterior ya no es compatible:J2SE 5.0 tigre septiembre de 2004 noviembre de 2009 abril 2015
La versión anterior ya no es compatible:Java SE 6 Mustang diciembre de 2006 abril 2013 Diciembre de 2018
Diciembre de 2026, soporte pagado para Azul Platform Core [33]
La versión anterior ya no es compatible:Delfín de Java SE 7 julio de 2011 abril 2015 julio 2022
La versión anterior aún es compatible:Java SE 8 (LTS) Marzo del 2014 Enero de 2019 para uso comercial de Oracle
Diciembre de 2030 para uso no comercial de Oracle
Diciembre de 2030 para Azul
Al menos mayo de 2026 para AdoptOpenJDK
Al menos mayo de 2026 para Amazon Correct
diciembre 2030
La versión anterior ya no es compatible:Java SE 9 septiembre 2017 Marzo de 2018 para OpenJDK Indisponible
La versión anterior ya no es compatible:Java SE 10 marzo 2018 Septiembre de 2018 para OpenJDK Indisponible
La versión anterior aún es compatible:Java SE 11 (LTS) septiembre 2018 Septiembre de 2026 para Azul
Al menos octubre de 2024 para AdoptOpenJDK
Al menos septiembre de 2027 para Amazon Correct
Al menos octubre de 2024 para Microsoft [34] [35]
Septiembre 2026
Septiembre 2028 para Azul [33]
La versión anterior ya no es compatible:Java SE 12 marzo 2019 Septiembre de 2019 para OpenJDK Indisponible
La versión anterior ya no es compatible:Java SE 13 septiembre 2019 Marzo de 2020 para OpenJDK Indisponible
La versión anterior ya no es compatible:Java SE 14 marzo 2020 Septiembre de 2020 para OpenJDK Indisponible
La versión anterior ya no es compatible:Java SE 15 septiembre 2020 Marzo de 2021 para OpenJDK
Marzo de 2023 para Azul [33]
DAKOTA DEL NORTE
La versión anterior ya no es compatible:Java SE 16 marzo 2021 Septiembre de 2021 para OpenJDK Indisponible
Versión estable actual: Java SE 17 (LTS) septiembre 2021 Septiembre de 2029 para Azul
Al menos septiembre de 2027 para Microsoft
Septiembre de 2029 o posterior
Septiembre de 2031 para Azul Platform Prime
Versión futura:Java SE 18 marzo 2022 Septiembre de 2022 para OpenJDK Indisponible
Leyenda:Versión antiguaLa versión anterior aún es compatibleVersión actualÚltima versión de vista previaVersión futura

Java se distribuyó inicialmente como Java Development Kit 1.0 (JDK 1.0). Esto incluye el tiempo de ejecución de Java (la máquina virtual y las bibliotecas de clases) y las herramientas de desarrollo (el compilador de Java y otras herramientas). Posteriormente, Sun proporcionó un paquete que incluía solo el tiempo de ejecución, llamado Java Runtime Environment (JRE). Normalmente, las personas se refieren a una versión particular de Java a través de la versión de JDK (por ejemplo, JDK 1.4). Las versiones de JDK 1.2 y superiores a menudo se denominan Java 2. Por ejemplo, el nombre oficial de JDK 1.4 es Java (TM) 2 Plataforma, Edición estándar 1.4.

El lenguaje se mantuvo estable desde JDK 1.0 hasta JDK 1.4.x, con J2SE 5.0 se introdujeron nuevas funciones en el lenguaje. La biblioteca de clases que viene con JDK se ha ampliado y modificado progresivamente en algunas partes.

En septiembre de 2017, Mark Reinhold, gerente jefe de la plataforma Java, propuso lanzar una nueva versión de Java cada 6 meses, en lugar de cada 2 años como ocurría anteriormente.

Versiones de la especificación de idioma

Los cambios en el idioma se formalizan en la especificación del idioma. Cada nueva edición de las especificaciones integra los cambios solicitados hasta ese momento a través de Java Specification Requests y consecuentemente implementados en el compilador javac.

  • El lenguaje de programación Java, primera edición
  • El lenguaje de programación Java, segunda edición
  • El lenguaje de programación Java, tercera edición
  • El lenguaje de programación Java, edición Java SE 7
  • El lenguaje de programación Java, edición Java SE 8
  • El lenguaje de programación Java, edición Java SE 9

Curiosidades

  • Parece que el nombre Oak deriva del hecho de que Gosling y sus colegas, durante el período en que desarrollaron el lenguaje, tenían como única compañía la de un roble que estaba justo afuera de la ventana de la oficina donde trabajaban.
  • Una leyenda urbana -nunca confirmada- cuenta que el nombre de la lengua fue pensado, en un momento posterior y por los propios creadores, como un acrónimo de " Just Another Vacuum Acronym " (" Just Another Empty Acronym "), con un irónico referencia a un número muy alto de abreviaturas utilizadas en el entorno de TI.
  • Dado que los creadores del lenguaje solían estar en un café donde discutían el proyecto, parecería que el lenguaje tomó su nombre y símbolo de esta costumbre ( Java es una cualidad del café de la isla homónima de Indonesia ), tanto así que el número mágico que identifica un archivo bytecode obtenido de la compilación de un archivo Java es , que en inglés significa girl (babe) of the cafe (café) [36] .0xCAFEBABE

Notas

  1. ^ [1]
  2. ^ La especificación del lenguaje Java , en java.sun.com . Consultado el 5 de mayo de 2011 .
  3. ^ JavaWorld.com, "¿Por qué decidieron llamarlo Java?" , en javaworld.com . Consultado el 5 de mayo de 2011 (archivado desde el original el 3 de agosto de 2009) .
  4. ^ Como se indica en Design Goals of the Java (TM) Programming Language: Simple, Object Oriented, and Familiar , en java.sun.com . Consultado el 6 de mayo de 2011 .
  5. ^ El entorno del lenguaje Java
  6. ^ El entorno del lenguaje Java
  7. ^ El lenguaje Java (tm): una descripción general
  8. ^ "P: ¿Qué componentes del software JDK están abiertos hoy? R: Estamos abriendo el compilador del lenguaje de programación Java ("javac") y la máquina virtual Java HotSpot". Preguntas frecuentes sobre Java gratuito y de código abierto Archivado el 3 de marzo de 2012 en WebCite .; la fuente se publica a través de OpenJDK Archivado el 11 de junio de 2007 en Internet Archive . proyecto.
  9. ^ ¡Abierto JDK está aquí! ( TXT ), en mail.openjdk.java.net , Sun Microsystems, 8 de mayo de 2007. Consultado el 9 de mayo de 2007 .
  10. ^ a b La especificación del lenguaje Java , en java.sun.com . Consultado el 5 de mayo de 2011 .
  11. ^ Objetivos de diseño del lenguaje de programación Java (TM) , en java.sun.com . Consultado el 6 de mayo de 2011 .
  12. ^ Popularidad del lenguaje de programación , en langpop.com , 2014. Consultado el 7 de febrero de 2014 (archivado desde el original el 27 de mayo de 2012) .
  13. ^ Índice de la comunidad de programación de TIOBE , en tiobe.com , 2009. Consultado el 6 de mayo de 2009 .
  14. ^ Los tutoriales de Java
  15. ^ en particular, está definido para funcionar en cualquier objeto que sea una instancia de java.lang.Iterable
  16. ^ James Gosling, Bill Joy, Guy Steele, Gilad Bracha, Capítulo 4. Tipos, valores y variables , en La especificación del lenguaje Java, tercera edición . Consultado el 6 de mayo de 2011 .
  17. ^ Las especificaciones del lenguaje no permiten la especificación de más de una superclase en la definición de una clase determinada: consulte Especificaciones de Java SE, Especificaciones de Java SE .
  18. ^ El entorno del lenguaje Java, "Interfaces del lenguaje Java" , en java.sun.com . Consultado el 6 de mayo de 2011 .
  19. ^ James Gosling, Bill Joy, Guy Steele, Gilad Bracha, Capítulo 9. Interfaces , en La especificación del lenguaje Java, tercera edición . Consultado el 7 de mayo de 2011 .
  20. ^ Explicación de Java 8: métodos predeterminados , en zeroturnaround.com . Consultado el 3 de abril de 2016 .
  21. ^ Bienvenido a NetBeans
  22. ^ Descargas de Java SE
  23. ^ Premios
  24. ^ El entorno del lenguaje Java , en java.sun.com . Consultado el 6 de mayo de 2011 .
  25. ^ William Wong, Escribir una vez, depurar en todas partes , en electronicdesign.com . Archivado desde el original el 21 de marzo de 2009 . Hasta ahora, la promesa de Java de "escribir una vez, ejecutar en todas partes" no se ha hecho realidad. La mayor parte de una aplicación Java migrará entre la mayoría de las implementaciones de Java, pero aprovechar una función específica de VM provoca problemas de portabilidad.
  26. ^ Cómo escribir comentarios de documentos para la herramienta Javadoc , en oracle.com . Consultado el 16 de junio de 2011 .
  27. ^ La especificación del lenguaje Java, Anotaciones , en java.sun.com . Consultado el 16 de junio de 2011 .
  28. ^ El tipo que define la anotación en uso debe haber sido marcado con la meta-anotación @Retention. Consulte la Especificación del lenguaje Java, Interfaces , en java.sun.com . Consultado el 16 de junio de 2011 .
  29. ^ Hoja de ruta de soporte de Oracle Java SE , en oracle.com .
  30. ^ Soporte | AdoptOpenJDK , en adoptopenjdk.net .
  31. ^ Compatibilidad extendida con Amazon Corretto 8 y 11 , en aws.amazon.com .
  32. ^ Mapa de ruta de soporte Java de Azul , en kr.azul.com .
  33. ^ a b c Hoja de ruta de soporte de Azul , en Azul | Mejor rendimiento de Java, compatibilidad superior con Java . Consultado el 8 de julio de 2021 .
  34. ^ Hoja de ruta de soporte para Microsoft Build of OpenJDK , en docs.microsoft.com . Consultado el 3 de agosto de 2021 .
  35. ^ Anuncio de disponibilidad general de Microsoft Build de OpenJDK , en Java en Microsoft , 25 de mayo de 2021. Consultado el 3 de agosto de 2021 .
  36. ^ Comunicación privada de James Gosling a Bill Bumgarner , en radio.weblogs.com . Consultado el 1 de agosto de 2011 (archivado desde el original el 23 de mayo de 2009) .

Bibliografía

Fuentes utilizadas para la redacción de la entrada Especificaciones de idioma

Las diferentes ediciones de las especificaciones están accesibles en el sitio web de Oracle . La última edición es la siguiente:

Textos en profundidad
  • ( EN ) Ken Arnold , James Gosling , David Holmes, El lenguaje de programación Java, Cuarta edición , Addison-Wesley Professional, 2005, ISBN  0-321-34980-6 .

Artículos relacionados

Otros proyectos

Enlaces externos