Java (lenguaje de programación)

Lenguaje de programación orientado a objetos

Java
ParadigmaMultiparadigma : genérico , orientado a objetos ( basado en clases ), funcional , imperativo , reflexivo , concurrente
Diseñado porJames Gosling
ReveladorCorporación Oracle
Apareció por primera vez23 de mayo de 1995 ; hace 29 años [1] ( 23 de mayo de 1995 )
Disciplina de mecanografíaEstático, fuerte, seguro , nominativo , manifiesto
Gestión de la memoriaRecolección automática de basura
Extensiones de nombre de archivo.java, .class , .jar , .jmod, .war
Sitio web
  • oracle.com/java/
  • java.com
  • desarrollo.java
Influenciado por
CLU , [2] Simula67 , [2] Lisp , [2] Smalltalk , [2] Ada 83 , C++ , [3] C# , [4] Eiffel , [5] Mesa , [6] Modula-3 , [7] Oberon , [8] Objective-C , [9] UCSD Pascal , [10] [11] Object Pascal [12]
Influenciado
Ada 2005 , BeanShell , C# , Chapel , [13] Clojure , ECMAScript , Fantom , Gambas , [14] Groovy , Hack , [15] Haxe , J# , Kotlin , PHP , Python , Scala , Seed7 , Vala , JavaScript , JS++ , ArkTS
  • Programación en Java en Wikilibros

Java es un lenguaje de programación de alto nivel , basado en clases y orientado a objetos que está diseñado para tener la menor cantidad posible de dependencias de implementación . Es un lenguaje de programación de propósito general destinado a permitir a los programadores escribir una vez, ejecutar en cualquier lugar ( WORA ), [16] lo que significa que el código Java compilado puede ejecutarse en todas las plataformas que admiten Java sin la necesidad de volver a compilar. [17] Las aplicaciones Java generalmente se compilan en código de bytes que puede ejecutarse en cualquier máquina virtual Java (JVM) independientemente de la arquitectura informática subyacente . La sintaxis de Java es similar a C y C++ , pero tiene menos funciones de bajo nivel que cualquiera de ellas. El entorno de ejecución de Java proporciona capacidades dinámicas (como reflexión y modificación de código en tiempo de ejecución) que normalmente no están disponibles en los lenguajes compilados tradicionales.

Java ganó popularidad poco después de su lanzamiento y ha sido un lenguaje de programación muy popular desde entonces. [18] Java fue el tercer lenguaje de programación más popular en 2022 [actualizar]según GitHub . [19] Aunque sigue siendo muy popular, ha habido una disminución gradual en el uso de Java en los últimos años con otros lenguajes que utilizan JVM ganando popularidad. [20]

Java fue desarrollado originalmente por James Gosling en Sun Microsystems . Fue lanzado en mayo de 1995 como un componente central de la plataforma Java de Sun. Los compiladores de Java , las máquinas virtuales y las bibliotecas de clases de implementación originales y de referencia fueron lanzados originalmente por Sun bajo licencias propietarias . A partir de mayo de 2007, en cumplimiento con las especificaciones del Java Community Process , Sun había vuelto a licenciar la mayoría de sus tecnologías Java bajo la licencia GPL-2.0-only . Oracle ofrece su propia HotSpot Java Virtual Machine, sin embargo, la implementación de referencia oficial es la OpenJDK JVM, que es un software gratuito de código abierto y utilizado por la mayoría de los desarrolladores y es la JVM predeterminada para casi todas las distribuciones de Linux.

A partir de septiembre de 2024 [actualizar], Java 23 es la última versión (Java 22 y 20 ya no reciben mantenimiento). Java 8, 11, 17 y 21 son versiones LTS anteriores que aún reciben soporte oficial.

Historia

Duque, la mascota de Java
James Gosling , el creador de Java, en 2008

James Gosling , Mike Sheridan y Patrick Naughton iniciaron el proyecto del lenguaje Java en junio de 1991. [21] Java fue diseñado originalmente para televisión interactiva, pero era demasiado avanzado para la industria de la televisión por cable digital en ese momento. [22] El lenguaje inicialmente se llamó Oak en honor a un roble que se encontraba afuera de la oficina de Gosling. Más tarde, el proyecto se llamó Green y finalmente se renombró Java , de Java coffee , un tipo de café de Indonesia . [23] Gosling diseñó Java con una sintaxis de estilo C / C++ que los programadores de sistemas y aplicaciones encontrarían familiar. [24]

Sun Microsystems lanzó la primera implementación pública como Java 1.0 en 1996. [25] Prometía la funcionalidad de escribir una vez, ejecutar en cualquier lugar (WORA), proporcionando tiempos de ejecución sin costo en plataformas populares . Bastante seguro y con seguridad configurable, permitía restricciones de acceso a archivos y redes. Los principales navegadores web pronto incorporaron la capacidad de ejecutar applets de Java dentro de páginas web, y Java rápidamente se hizo popular. El compilador de Java 1.0 fue reescrito en Java por Arthur van Hoff para cumplir estrictamente con la especificación del lenguaje Java 1.0. [26] Con la llegada de Java 2 (lanzado inicialmente como J2SE 1.2 en diciembre de 1998 - 1999), las nuevas versiones tenían múltiples configuraciones creadas para diferentes tipos de plataformas. J2EE incluía tecnologías y API para aplicaciones empresariales que normalmente se ejecutan en entornos de servidor, mientras que J2ME presentaba API optimizadas para aplicaciones móviles. La versión de escritorio pasó a llamarse J2SE. En 2006, con fines comerciales, Sun renombró las nuevas versiones de J2 como Java EE , Java ME y Java SE , respectivamente.

En 1997, Sun Microsystems se acercó al organismo de normalización ISO/IEC JTC 1 y más tarde a Ecma International para formalizar Java, pero pronto se retiró del proceso. [27] [28] [29] Java sigue siendo un estándar de facto , controlado a través del Java Community Process . [30] En un momento dado, Sun puso a disposición la mayoría de sus implementaciones de Java sin cargo, a pesar de su condición de software propietario . Sun generó ingresos de Java a través de la venta de licencias para productos especializados como Java Enterprise System.

El 13 de noviembre de 2006, Sun lanzó gran parte de su máquina virtual Java (JVM) como software libre y de código abierto (FOSS), bajo los términos de la licencia GPL-2.0-only . El 8 de mayo de 2007, Sun finalizó el proceso, poniendo a disposición todo el código central de su JVM bajo los términos de distribución de software libre /código abierto, a excepción de una pequeña parte del código del que Sun no poseía los derechos de autor. [31]

El vicepresidente de Sun, Rich Green, dijo que el papel ideal de Sun con respecto a Java era el de evangelista . [32] Tras la adquisición de Sun Microsystems por parte de Oracle Corporation en 2009-10, Oracle se ha descrito a sí misma como la administradora de la tecnología Java con un compromiso incansable para fomentar una comunidad de participación y transparencia. [33] Esto no impidió que Oracle presentara una demanda contra Google poco después por usar Java dentro del SDK de Android (consulte la sección de Android ).

El 2 de abril de 2010, James Gosling renunció a Oracle . [34]

En enero de 2016, Oracle anunció que los entornos de ejecución de Java basados ​​en JDK 9 descontinuarían el complemento del navegador. [35]

El software Java se ejecuta en todo, desde computadoras portátiles hasta centros de datos , consolas de juegos y supercomputadoras científicas . [36]

Oracle (y otros) recomiendan encarecidamente desinstalar versiones obsoletas y sin soporte de Java, debido a problemas de seguridad sin resolver en versiones anteriores. [37]

Principios

Había cinco objetivos principales al crear el lenguaje Java: [17]

  1. Debe ser simple, orientado a objetos y familiar.
  2. Debe ser robusto y seguro.
  3. Debe ser neutral en cuanto a la arquitectura y portable.
  4. Debe ejecutarse con alto rendimiento.
  5. Debe ser interpretado , enhebrado y dinámico .

Versiones

A partir de septiembre de 2023 [actualizar], Java 8, 11, 17 y 21 recibirán soporte como versiones de soporte a largo plazo (LTS). [38]

Oracle lanzó la última actualización pública sin costo para la versión heredada Java 8 LTS en enero de 2019 para uso comercial, aunque por lo demás seguirá brindando soporte para Java 8 con actualizaciones públicas para uso personal de manera indefinida. Otros proveedores como Adoptium continúan ofreciendo compilaciones gratuitas de las versiones de soporte a largo plazo (LTS) de OpenJDK. Estas compilaciones pueden incluir parches de seguridad adicionales y correcciones de errores. [39]

Principales versiones de lanzamiento de Java, junto con sus fechas de lanzamiento:

VersiónFecha
Versión beta del JDK1995
JDK 1.023 de enero de 1996 [40]
JDK 1.119 de febrero de 1997
J2SE 1.28 de diciembre de 1998
J2SE 1.38 de mayo de 2000
J2SE 1.46 de febrero de 2002
J2SE 5.030 de septiembre de 2004
Java SE 611 de diciembre de 2006
Java SE 728 de julio de 2011
Java SE 8 (LTS)18 de marzo de 2014
Java SE 921 de septiembre de 2017
Java SE 1020 de marzo de 2018
Java SE 11 (LTS)25 de septiembre de 2018 [41]
Java SE 1219 de marzo de 2019
Java SE 1317 de septiembre de 2019
Java SE 1417 de marzo de 2020
Java SE 1515 de septiembre de 2020 [42]
Java SE 1616 de marzo de 2021
Java SE 17 (LTS)14 de septiembre de 2021
Java SE 1822 de marzo de 2022
Java SE 1920 de septiembre de 2022
Java SE 2021 de marzo de 2023
Java SE 21 (LTS)19 de septiembre de 2023 [43]
Java SE 2219 de marzo de 2024
Java SE 2317 de septiembre de 2024

Ediciones

Sun ha definido y respaldado cuatro ediciones de Java destinadas a diferentes entornos de aplicaciones y ha segmentado muchas de sus API para que pertenezcan a una de las plataformas. Las plataformas son:

Las clases de las API de Java se organizan en grupos separados llamados paquetes . Cada paquete contiene un conjunto de interfaces , clases, subpaquetes y excepciones relacionadas .

Sun también proporcionó una edición llamada Personal Java que ha sido reemplazada por pares de perfiles de configuración de Java ME posteriores y basados ​​en estándares.

Sistema de ejecución

JVM de Java y código de bytes

Un objetivo de diseño de Java es la portabilidad , lo que significa que los programas escritos para la plataforma Java deben ejecutarse de manera similar en cualquier combinación de hardware y sistema operativo con soporte de tiempo de ejecución adecuado. Esto se logra compilando el código del lenguaje Java en una representación intermedia llamada código de bytes de Java , en lugar de directamente en código de máquina específico de la arquitectura . Las instrucciones de código de bytes de Java son análogas al código de máquina, pero están destinadas a ser ejecutadas por una máquina virtual (VM) escrita específicamente para el hardware del host. Los usuarios finales suelen utilizar un entorno de ejecución de Java (JRE) instalado en su dispositivo para aplicaciones Java independientes o un navegador web para subprogramas de Java .

Las bibliotecas estándar proporcionan una forma genérica de acceder a funciones específicas del host, como gráficos, subprocesos y redes .

El uso de bytecode universal hace que la portabilidad sea sencilla. Sin embargo, la sobrecarga de interpretar bytecode en instrucciones de máquina hacía que los programas interpretados casi siempre se ejecutaran más lentamente que los ejecutables nativos . Los compiladores Just-in-time (JIT) que compilan bytecodes en código de máquina durante el tiempo de ejecución se introdujeron desde una etapa temprana. El compilador Hotspot de Java es en realidad dos compiladores en uno; y con GraalVM (incluido en, por ejemplo, Java 11, pero eliminado a partir de Java 16) que permite la compilación por niveles. [48] Java en sí es independiente de la plataforma y se adapta a la plataforma particular en la que se ejecutará mediante una máquina virtual Java (JVM), que traduce el bytecode de Java al lenguaje de máquina de la plataforma. [49]

Actuación

Los programas escritos en Java tienen reputación de ser más lentos y requerir más memoria que los escritos en C++ . [50] [51] Sin embargo, la velocidad de ejecución de los programas Java mejoró significativamente con la introducción de la compilación justo a tiempo en 1997/1998 para Java 1.1 , [52] la adición de características del lenguaje que soportan un mejor análisis de código (como clases internas, la clase StringBuilder, aserciones opcionales, etc.), y optimizaciones en la máquina virtual Java, como HotSpot convirtiéndose en la JVM predeterminada de Sun en 2000. Con Java 1.5, el rendimiento se mejoró con la adición del java.util.concurrentpaquete, incluyendo implementaciones sin bloqueo de ConcurrentMaps y otras colecciones de múltiples núcleos, y se mejoró aún más con Java 1.6.

No JVM

Algunas plataformas ofrecen soporte de hardware directo para Java; hay microcontroladores que pueden ejecutar código de bytes de Java en hardware en lugar de en una máquina virtual Java de software, [53] y algunos procesadores basados ​​en ARM podrían tener soporte de hardware para ejecutar código de bytes de Java a través de su opción Jazelle , aunque el soporte se ha abandonado en su mayor parte en las implementaciones actuales de ARM.

Gestión automática de memoria

Java utiliza un recolector de basura automático para gestionar la memoria en el ciclo de vida de los objetos . El programador determina cuándo se crean los objetos y el entorno de ejecución de Java es responsable de recuperar la memoria una vez que los objetos ya no se utilizan. Una vez que no quedan referencias a un objeto, la memoria inalcanzable se vuelve elegible para ser liberada automáticamente por el recolector de basura. Algo similar a una pérdida de memoria aún puede ocurrir si el código de un programador contiene una referencia a un objeto que ya no se necesita, generalmente cuando los objetos que ya no se necesitan se almacenan en contenedores que aún están en uso. [54] Si se llaman métodos para un objeto inexistente, se lanza una excepción de puntero nulo . [55] [56]

Una de las ideas detrás del modelo de administración automática de memoria de Java es que los programadores pueden ahorrarse la carga de tener que realizar una administración manual de la memoria. En algunos lenguajes, la memoria para la creación de objetos se asigna implícitamente en la pila o se asigna y desasigna explícitamente del montón . En este último caso, la responsabilidad de administrar la memoria reside en el programador. Si el programa no desasigna un objeto, se produce una fuga de memoria . [54] Si el programa intenta acceder o desasignar memoria que ya ha sido desasignada, el resultado es indefinido y difícil de predecir, y es probable que el programa se vuelva inestable o se bloquee. Esto se puede remediar parcialmente mediante el uso de punteros inteligentes , pero estos agregan sobrecarga y complejidad. La recolección de basura no evita las fugas de memoria lógica , es decir, aquellas en las que se sigue haciendo referencia a la memoria pero nunca se utiliza. [54]

La recolección de basura puede ocurrir en cualquier momento. Lo ideal es que ocurra cuando un programa esté inactivo. Se garantiza que se activará si no hay suficiente memoria libre en el montón para asignar un nuevo objeto; esto puede hacer que un programa se detenga momentáneamente. La gestión explícita de la memoria no es posible en Java.

Java no admite la aritmética de punteros al estilo C/C++ , donde las direcciones de los objetos se pueden manipular aritméticamente (por ejemplo, sumando o restando un desplazamiento). Esto permite que el recolector de elementos no utilizados reubique los objetos referenciados y garantiza la seguridad de los tipos.

Al igual que en C++ y otros lenguajes orientados a objetos, las variables de los tipos de datos primitivos de Java se almacenan directamente en campos (para objetos) o en la pila (para métodos) en lugar de en el montón, como suele suceder con los tipos de datos no primitivos (pero consulte el análisis de escape ). Esta fue una decisión consciente de los diseñadores de Java por razones de rendimiento.

Java contiene varios tipos de recolectores de basura. Desde Java 9, HotSpot utiliza el recolector de basura Garbage First (G1GC) como predeterminado. [57] Sin embargo, también hay otros recolectores de basura que se pueden utilizar para administrar el montón. Para la mayoría de las aplicaciones en Java, G1GC es suficiente. Anteriormente, se utilizaba el recolector de basura paralelo en Java 8.

Resolver el problema de gestión de memoria no libera al programador de la carga de manejar adecuadamente otros tipos de recursos, como conexiones de red o de bases de datos, controladores de archivos, etc., especialmente en presencia de excepciones.

Sintaxis

Este gráfico de dependencia de las clases Java Core se creó con jdeps y Gephi .

La sintaxis de Java está influenciada en gran medida por C++ y C . A diferencia de C++, que combina la sintaxis para programación estructurada, genérica y orientada a objetos, Java fue construido casi exclusivamente como un lenguaje orientado a objetos. [17] Todo el código está escrito dentro de clases, y cada elemento de datos es un objeto, con la excepción de los tipos de datos primitivos (es decir, números enteros, números de punto flotante, valores booleanos y caracteres), que no son objetos por razones de rendimiento. Java reutiliza algunos aspectos populares de C++ (como el printfmétodo).

A diferencia de C++, Java no admite la sobrecarga de operadores [58] ni la herencia múltiple para clases, aunque sí admite la herencia múltiple para interfaces . [59]

Java utiliza comentarios similares a los de C++. Hay tres estilos diferentes de comentarios: un estilo de una sola línea marcado con dos barras ( //), un estilo de varias líneas que se abre con /*y se cierra con */, y el estilo de comentarios Javadoc/** que se abre con y se cierra con */. El estilo de comentarios Javadoc permite al usuario ejecutar el ejecutable Javadoc para crear documentación para el programa y puede ser leído por algunos entornos de desarrollo integrados (IDE) como Eclipse para permitir que los desarrolladores accedan a la documentación dentro del IDE.

Hola Mundo

El siguiente es un ejemplo simple de un programa "¡Hola, mundo!" que escribe un mensaje en la salida estándar :

clase pública Ejemplo {    public static void principal ( cadena [] argumentos ) {      Sistema . out . println ( "¡Hola mundo!" ); }}

Clases especiales

Subprograma

Los subprogramas de Java son programas integrados en otras aplicaciones, normalmente en una página web que se muestra en un navegador web. La API de subprogramas de Java está obsoleta desde Java 9 en 2017. [60] [61]

Servlet

La tecnología de servlets de Java proporciona a los desarrolladores web un mecanismo simple y consistente para ampliar la funcionalidad de un servidor web y acceder a los sistemas empresariales existentes. Los servlets son componentes Java EE del lado del servidor que generan respuestas a las solicitudes de los clientes . La mayoría de las veces, esto significa generar páginas HTML en respuesta a las solicitudes HTTP , aunque hay una serie de otras clases de servlets estándar disponibles, por ejemplo, para la comunicación WebSocket .

La API de servlet de Java ha sido reemplazada hasta cierto punto (aunque todavía se utiliza de forma discreta) por dos tecnologías Java estándar para servicios web:

Las implementaciones típicas de estas API en servidores de aplicaciones o contenedores de servlets utilizan un servlet estándar para manejar todas las interacciones con las solicitudes y respuestas HTTP que delegan a los métodos del servicio web para la lógica comercial real.

Páginas de JavaServer

Las páginas JavaServer ( JSP ) son componentes Java EE del lado del servidor que generan respuestas, normalmente páginas HTML , a solicitudes HTTP de los clientes . Las JSP incorporan código Java en una página HTML mediante el uso de los delimitadores <% especiales y . Una JSP se compila en un servlet%> Java , una aplicación Java por derecho propio, la primera vez que se accede a ella. Después de eso, el servlet generado crea la respuesta. [62]

Aplicación Swing

Swing es una biblioteca de interfaz gráfica de usuario para la plataforma Java SE. Es posible especificar una apariencia diferente a través del sistema de apariencia conectable de Swing. Sun proporciona clones de Windows , GTK+ y Motif . Apple también proporciona una apariencia Aqua para macOS . Si bien las implementaciones anteriores de estas apariencias pueden haberse considerado deficientes, Swing en Java SE 6 aborda este problema mediante el uso de rutinas de dibujo de widgets de GUI más nativas de las plataformas subyacentes. [63]

Aplicación JavaFX

JavaFX es una plataforma de software para crear y entregar aplicaciones de escritorio , así como aplicaciones web enriquecidas que pueden ejecutarse en una amplia variedad de dispositivos. JavaFX está destinado a reemplazar a Swing como la biblioteca GUI estándar para Java SE , pero desde JDK 11 JavaFX no ha estado en el JDK principal y en su lugar en un módulo separado. [64] JavaFX tiene soporte para computadoras de escritorio y navegadores web en Microsoft Windows , Linux y macOS . JavaFX no tiene soporte para la apariencia nativa del sistema operativo. [65]

Genéricos

En 2004, se añadieron genéricos al lenguaje Java, como parte de J2SE 5.0. Antes de la introducción de los genéricos, cada declaración de variable tenía que ser de un tipo específico. Para las clases contenedoras, por ejemplo, esto es un problema porque no hay una forma sencilla de crear un contenedor que acepte solo tipos específicos de objetos. O bien el contenedor opera en todos los subtipos de una clase o interfaz, normalmente Object, o bien se tiene que crear una clase contenedora diferente para cada clase contenida. Los genéricos permiten la comprobación de tipos en tiempo de compilación sin tener que crear muchas clases contenedoras, cada una de las cuales contiene un código casi idéntico. Además de permitir un código más eficiente, se evita que se produzcan ciertas excepciones en tiempo de ejecución, mediante la emisión de errores en tiempo de compilación. Si Java evitara que ClassCastExceptionse produjeran todos los errores de tipo en tiempo de ejecución, sería seguro en cuanto a tipos .

En 2016, se demostró que el sistema de tipos de Java no es sólido , ya que es posible utilizar genéricos para construir clases y métodos que permitan la asignación de una instancia de una clase a una variable de otra clase no relacionada. El compilador acepta dicho código, pero falla en tiempo de ejecución con una excepción de conversión de clase. [66]

Crítica

Las críticas dirigidas a Java incluyen la implementación de genéricos, [67] velocidad, [50] el manejo de números sin signo, [68] la implementación de aritmética de punto flotante, [69] y un historial de vulnerabilidades de seguridad en la implementación principal de Java VM HotSpot . [70] Los desarrolladores han criticado la complejidad y verbosidad de Java Persistence API (JPA), una parte estándar de Java EE. Esto ha llevado a una mayor adopción de abstracciones de nivel superior como Spring Data JPA, que tiene como objetivo simplificar las operaciones de base de datos y reducir el código repetitivo. La creciente popularidad de dichos marcos sugiere limitaciones en la facilidad de uso de la implementación estándar de JPA para el desarrollo moderno de Java. [71]

Bibliotecas de clases

La biblioteca de clases de Java es la biblioteca estándar , desarrollada para respaldar el desarrollo de aplicaciones en Java. Está controlada por Oracle en cooperación con otros a través del programa Java Community Process . [72] Las empresas o personas que participan en este proceso pueden influir en el diseño y desarrollo de las API. Este proceso ha sido objeto de controversia durante la década de 2010. [73] La biblioteca de clases contiene características como:

Documentación

Javadoc es un sistema de documentación integral, creado por Sun Microsystems . Proporciona a los desarrolladores un sistema organizado para documentar su código. Los comentarios de Javadoc tienen un asterisco adicional al principio, es decir, los delimitadores son /**y */, mientras que los comentarios normales de varias líneas en Java están delimitados por /*y */, y los comentarios de una sola línea comienzan con //. [81]

Implementaciones

Oracle Corporation posee la implementación oficial de la plataforma Java SE, debido a su adquisición de Sun Microsystems el 27 de enero de 2010. Esta implementación se basa en la implementación original de Java por parte de Sun. La implementación de Oracle está disponible para Windows , macOS , Linux y Solaris . Debido a que Java carece de cualquier estandarización formal reconocida por Ecma International , ISO/IEC, ANSI u otras organizaciones de estándares de terceros, la implementación de Oracle es el estándar de facto .

La implementación de Oracle se presenta en dos distribuciones diferentes: Java Runtime Environment (JRE), que contiene las partes de la plataforma Java SE necesarias para ejecutar programas Java y está destinado a los usuarios finales, y Java Development Kit (JDK), que está destinado a los desarrolladores de software e incluye herramientas de desarrollo como el compilador de Java , Javadoc , Jar y un depurador . Oracle también ha lanzado GraalVM , un compilador e intérprete dinámico de Java de alto rendimiento.

OpenJDK es otra implementación de Java SE que se encuentra bajo licencia GNU GPL. La implementación comenzó cuando Sun comenzó a publicar el código fuente de Java bajo la licencia GPL. A partir de Java SE 7, OpenJDK es la implementación de referencia oficial de Java.

El objetivo de Java es hacer que todas las implementaciones de Java sean compatibles. Históricamente, la licencia de marca registrada de Sun para el uso de la marca Java insiste en que todas las implementaciones sean compatibles . Esto resultó en una disputa legal con Microsoft después de que Sun afirmara que la implementación de Microsoft no era compatible con la invocación de método remoto (RMI) de Java o la Interfaz nativa de Java (JNI) y había agregado características específicas de la plataforma propias. Sun presentó una demanda en 1997 y, en 2001, ganó un acuerdo de US$20 millones, así como una orden judicial que hacía cumplir los términos de la licencia de Sun. [82] Como resultado, Microsoft ya no envía Java con Windows .

El Java independiente de la plataforma es esencial para Java EE , y se requiere una validación aún más rigurosa para certificar una implementación. Este entorno permite aplicaciones portables del lado del servidor.

Uso fuera de la plataforma Java

El lenguaje de programación Java requiere la presencia de una plataforma de software para que se puedan ejecutar los programas compilados.

Oracle proporciona la plataforma Java para su uso con Java. El SDK de Android es una plataforma de software alternativa que se utiliza principalmente para desarrollar aplicaciones Android con su propio sistema de interfaz gráfica de usuario.

Androide

El lenguaje Java es un pilar clave en Android , un sistema operativo móvil de código abierto . Aunque Android, construido sobre el núcleo Linux , está escrito en gran parte en C, el SDK de Android utiliza el lenguaje Java como base para las aplicaciones de Android, pero no utiliza ninguno de sus estándares GUI, SE, ME u otros estándares Java establecidos. [83] El lenguaje de bytecode compatible con el SDK de Android es incompatible con el bytecode de Java y se ejecuta en su propia máquina virtual, optimizada para dispositivos con poca memoria, como teléfonos inteligentes y tabletas . Dependiendo de la versión de Android, el bytecode es interpretado por la máquina virtual Dalvik o compilado en código nativo por el Android Runtime .

Android no proporciona la biblioteca estándar completa de Java SE, aunque el SDK de Android incluye una implementación independiente de un gran subconjunto de ella. Es compatible con Java 6 y algunas características de Java 7, ofreciendo una implementación compatible con la biblioteca estándar ( Apache Harmony ).

Controversia

El uso de tecnología relacionada con Java en Android dio lugar a una disputa legal entre Oracle y Google. El 7 de mayo de 2012, un jurado de San Francisco determinó que si las API podían estar protegidas por derechos de autor, entonces Google había infringido los derechos de autor de Oracle al usar Java en dispositivos Android. [84] El juez de distrito William Alsup dictaminó el 31 de mayo de 2012 que las API no pueden estar protegidas por derechos de autor, [85] pero esto fue revocado por el Tribunal de Apelaciones de los Estados Unidos para el Circuito Federal en mayo de 2014. [86] El 26 de mayo de 2016, el tribunal de distrito falló a favor de Google, dictaminando que la infracción de los derechos de autor de la API de Java en Android constituye un uso justo. [87] En marzo de 2018, este fallo fue revocado por el Tribunal de Apelaciones, que envió el caso de determinación de los daños al tribunal federal en San Francisco. [88] Google presentó una petición de auto de certiorari ante la Corte Suprema de los Estados Unidos en enero de 2019 para impugnar los dos fallos que el Tribunal de Apelaciones dictó a favor de Oracle. [89] El 5 de abril de 2021, el Tribunal falló 6 a 2 a favor de Google, que su uso de las API de Java debería considerarse un uso legítimo . Sin embargo, el tribunal se negó a pronunciarse sobre la posibilidad de proteger los derechos de autor de las API, y optó en cambio por determinar su fallo considerando que la API de Java es susceptible de protección por derechos de autor "simplemente por el bien del argumento". [90]

Véase también

Referencias

  1. ^ Binstock, Andrew (20 de mayo de 2015). «20 años de innovación en Java». Forbes . Archivado desde el original el 14 de marzo de 2016. Consultado el 18 de marzo de 2016 .
  2. ^ abcd Barbara Liskov con John Guttag (2000). Desarrollo de programas en Java: abstracción, especificación y diseño orientado a objetos . Estados Unidos, Addison Wesley. ISBN 978-0-201-65768-5.
  3. ^ Chaudhary, Harry H. (28 de julio de 2014). "Cracking The Java Programming Interview :: 2000+ Java Interview Que/Ans". Archivado desde el original el 29 de septiembre de 2023. Consultado el 29 de mayo de 2016 .
  4. ^ Java 5.0 agregó varias características nuevas del lenguaje (el bucle for mejorado , autoboxing , varargs y anotaciones ), después de que se introdujeran en el lenguaje similar (y competidor) C# . [1] Archivado el 19 de marzo de 2011 en Wayback Machine . [2] Archivado el 7 de enero de 2006 en Wayback Machine.
  5. ^ Gosling, James; McGilton, Henry (mayo de 1996). "El entorno del lenguaje Java". Archivado desde el original el 6 de mayo de 2014 . Consultado el 6 de mayo de 2014 .
  6. ^ Gosling, James; Joy, Bill; Steele, Guy; Bracha, Gilad. "La especificación del lenguaje Java, 2.ª edición". Archivado desde el original el 5 de agosto de 2011. Consultado el 8 de febrero de 2008 .
  7. ^ "Lenguajes de programación de la A a la Z: Modula-3". Computerworld. Archivado desde el original el 5 de enero de 2009. Consultado el 9 de junio de 2010 .
  8. ^ Niklaus Wirth declaró en varias ocasiones públicas, por ejemplo en una conferencia en el Museo Politécnico de Moscú en septiembre de 2005 (existen varios relatos independientes de primera mano en ruso, por ejemplo uno con una grabación de audio: Filippova, Elena (22 de septiembre de 2005). "Conferencia de Niklaus Wirth en el Museo Politécnico de Moscú". Archivado desde el original el 1 de diciembre de 2020 . Consultado el 20 de noviembre de 2011 .), que el equipo de diseño de Sun Java licenció las fuentes del compilador Oberon varios años antes del lanzamiento de Java y lo examinó: una compacidad (relativa), seguridad de tipos, recolección de basura, sin herencia múltiple para clases – todas estas características clave de diseño general son compartidas por Java y Oberon.
  9. ^ Patrick Naughton cita a Objective-C como una fuerte influencia en el diseño del lenguaje de programación Java, afirmando que los derivados directos notables incluyen interfaces Java (derivadas del protocolo de Objective-C ) y clases contenedoras primitivas. [3] Archivado el 13 de julio de 2011 en Wayback Machine .
  10. ^ TechMetrix Research (1999). "Historia de Java" (PDF) . Informe de servidores de aplicaciones Java . Archivado desde el original (PDF) el 29 de diciembre de 2010. El proyecto siguió adelante bajo el nombre de green y el lenguaje se basó en un antiguo modelo de UCSD Pascal , que permite generar código interpretativo.
  11. ^ "Una conversación con James Gosling – ACM Queue". Queue.acm.org. 31 de agosto de 2004. Archivado desde el original el 16 de julio de 2015. Consultado el 9 de junio de 2010 .
  12. ^ El equipo del lenguaje Java. Acerca de los "Delegados" de Microsoft (informe técnico). JavaSoft, Sun Microsystems, Inc. Archivado desde el original el 27 de junio de 2012. En el verano de 1996, Sun estaba diseñando el precursor de lo que ahora es el modelo de eventos de AWT y la arquitectura de componentes JavaBeans. Borland contribuyó en gran medida a este proceso. Analizamos con mucho cuidado Delphi Object Pascal y creamos un prototipo funcional de referencias de métodos enlazados para comprender su interacción con el lenguaje de programación Java y sus API.
  13. ^ "Especificación de la capilla (Agradecimientos)" (PDF) . Cray Inc. 1 de octubre de 2015. Archivado (PDF) del original el 5 de febrero de 2016 . Consultado el 14 de enero de 2016 .
  14. ^ "Introducción a la documentación de Gambas". Sitio web de Gambas. Archivado desde el original el 9 de octubre de 2017. Consultado el 9 de octubre de 2017 .
  15. ^ "Preguntas y respuestas de Facebook: Hack trae tipado estático al mundo PHP". InfoWorld . 26 de marzo de 2014. Archivado desde el original el 13 de febrero de 2015 . Consultado el 11 de enero de 2015 .
  16. ^ "¿Escribes una vez y corres en cualquier parte?". Computer Weekly . 2 de mayo de 2002. Archivado desde el original el 13 de agosto de 2021. Consultado el 27 de julio de 2009 .
  17. ^ abc «1.2 Objetivos de diseño del lenguaje de programación Java». Oracle. 1 de enero de 1999. Archivado desde el original el 23 de enero de 2013. Consultado el 14 de enero de 2013 .
  18. ^ Melanson, Mike (9 de agosto de 2022). "No lo llames regreso: por qué Java sigue siendo el campeón". GitHub . Archivado desde el original el 25 de agosto de 2023 . Consultado el 15 de octubre de 2023 .
  19. ^ "Los principales lenguajes de programación". El estado del Octoverse . GitHub . Archivado desde el original el 2 de agosto de 2023 . Consultado el 15 de octubre de 2023 .
  20. ^ McMillan, Robert (1 de agosto de 2013). "¿Está perdiendo Java su poder?" . Wired . Archivado desde el original el 15 de febrero de 2017. Consultado el 15 de octubre de 2023 .
  21. ^ Byous, Jon (c. 1998). «Tecnología Java: Los primeros años». Sun Developer Network . Sun Microsystems . Archivado desde el original el 20 de abril de 2005. Consultado el 22 de abril de 2005 .
  22. ^ Programación orientada a objetos "La historia de la tecnología Java". Sun Developer Network . c. 1995. Archivado desde el original el 10 de febrero de 2010 . Consultado el 30 de abril de 2010 .
  23. ^ Murphy, Kieron (4 de octubre de 1996). «Entonces, ¿por qué decidieron llamarlo Java?». JavaWorld . Archivado desde el original el 13 de julio de 2020. Consultado el 13 de julio de 2020 .
  24. ^ Kabutz, Heinz; Érase una vez un roble Archivado el 13 de abril de 2007 en Wayback Machine . Artima. Consultado el 29 de abril de 2007.
  25. ^ "JAVASOFT LANZA JAVA 1.0". Archivado desde el original el 10 de marzo de 2007. Consultado el 13 de mayo de 2018 .
  26. ^ Programación orientada a objetos con Java: Fundamentos y aplicaciones. Tata McGraw-Hill Education. pág. 34.
  27. ^ "JSG – Grupo de estudio de Java". open-std.org . Archivado desde el original el 25 de agosto de 2006 . Consultado el 2 de agosto de 2006 .
  28. ^ "Por qué Java no se estandarizó dos veces" (PDF) . Archivado (PDF) del original el 13 de enero de 2014 . Consultado el 3 de junio de 2018 .
  29. ^ "¿Qué es ECMA y por qué le importa a Microsoft?". ZDNet . Archivado desde el original el 6 de mayo de 2014 . Consultado el 6 de mayo de 2014 .
  30. ^ "Sitio web de Java Community Process". Jcp.org. 24 de mayo de 2010. Archivado desde el original el 8 de agosto de 2006. Consultado el 9 de junio de 2010 .
  31. ^ "JAVAONE: Sun – La mayor parte de Java es de código abierto". GrnLight.net. Archivado desde el original el 27 de mayo de 2014. Consultado el 26 de mayo de 2014 .
  32. ^ "El papel evolutivo de Sun como evangelista de Java". O'Reilly Media . Archivado desde el original el 15 de septiembre de 2010. Consultado el 2 de agosto de 2009 .
  33. ^ "Oracle y Java". oracle.com . Oracle Corporation. Archivado desde el original el 31 de enero de 2010 . Consultado el 23 de agosto de 2010 . Oracle ha sido un importante y sustancial defensor de Java desde su aparición en 1995 y asume el nuevo papel de administrador de la tecnología Java con un compromiso incansable de fomentar una comunidad de participación y transparencia.
  34. ^ Gosling, James (9 de abril de 2010). "Es hora de seguir adelante..." Por un nuevo camino . Archivado desde el original el 5 de noviembre de 2010. Consultado el 16 de noviembre de 2011 .
  35. ^ Tema, Dalibor. "Pasando a una Web sin complementos". Archivado desde el original el 16 de marzo de 2016 . Consultado el 15 de marzo de 2016 .
  36. ^ "Aprenda sobre la tecnología Java". Oracle. Archivado desde el original el 24 de noviembre de 2011. Consultado el 21 de noviembre de 2011 .
  37. ^ "¿Por qué debería desinstalar versiones anteriores de Java de mi sistema?". Oracle. Archivado desde el original el 12 de febrero de 2018. Consultado el 24 de septiembre de 2021 .
  38. ^ "Hoja de ruta de soporte de Oracle Java SE". Oracle. 13 de septiembre de 2021. Archivado desde el original el 19 de septiembre de 2021 . Consultado el 18 de septiembre de 2021 .
  39. ^ "Soporte de Temurin™; Adoptium". adoptium.net . Archivado desde el original el 29 de marzo de 2024 . Consultado el 29 de marzo de 2024 .
  40. ^ "JAVASOFT SHIPS JAVA 1.0". sun.com . Archivado desde el original el 10 de marzo de 2007 . Consultado el 5 de febrero de 2008 .
  41. ^ Chander, Sharat. "Introducción a Java SE 11". oracle.com . Archivado desde el original el 26 de septiembre de 2018. Consultado el 26 de septiembre de 2018 .
  42. ^ "¡La llegada de Java 15!". Oracle . 15 de septiembre de 2020. Archivado desde el original el 16 de septiembre de 2020 . Consultado el 15 de septiembre de 2020 .
  43. ^ "JDK 21". openjdk.org . Archivado desde el original el 20 de septiembre de 2023 . Consultado el 20 de septiembre de 2023 .
  44. ^ "Descripción general de la tarjeta Java". Oracle Technology Network . Oracle. Archivado desde el original el 7 de enero de 2015 . Consultado el 18 de diciembre de 2014 .
  45. ^ "Java Platform, Micro Edition (Java ME)". Oracle Technology Network . Oracle. Archivado desde el original el 4 de enero de 2015. Consultado el 18 de diciembre de 2014 .
  46. ^ "Java SE". Oracle Technology Network . Oracle. Archivado desde el original el 24 de diciembre de 2014 . Consultado el 18 de diciembre de 2014 .
  47. ^ "Java Platform, Enterprise Edition (Java EE)". Oracle Technology Network . Oracle. Archivado desde el original el 17 de diciembre de 2014. Consultado el 18 de diciembre de 2014 .
  48. ^ "Análisis profundo del nuevo compilador JIT de Java: Graal | Baeldung". www.baeldung.com . 6 de agosto de 2021. Archivado desde el original el 28 de octubre de 2021 . Consultado el 13 de octubre de 2021 .
  49. ^ "¿La JVM (Java Virtual Machine) es una plataforma dependiente o independiente de la misma? ¿Cuál es la ventaja de utilizar la JVM y que Java sea un lenguaje traducido?". Entrevista a un programador. Archivado desde el original el 19 de enero de 2015 . Consultado el 19 de enero de 2015 .
  50. ^ ab Jelovic, Dejan. "Por qué Java siempre será más lento que C++". Archivado desde el original el 11 de febrero de 2008. Consultado el 15 de febrero de 2008 .
  51. ^ Hundt, Robert. "Reconocimiento de bucles en C++/Java/Go/Scala" (PDF) . Archivado (PDF) desde el original el 16 de noviembre de 2011. Consultado el 12 de julio de 2012 .
  52. ^ "El compilador de Java Just-In-Time de Symantec se integrará en Sun JDK 1.1". Archivado desde el original el 28 de junio de 2010 . Consultado el 1 de agosto de 2009 .
  53. ^ Salcic, Zoran; Park, Heejong; Teich, Jürgen; Malik, Avinash; Nadeem, Muhammad (22 de julio de 2017). "Noc-HMP: un procesador multinúcleo heterogéneo para sistemas integrados diseñado en SystemJ". ACM Transactions on Design Automation of Electronic Systems . 22 (4): 73. doi :10.1145/3073416. ISSN  1084-4309. S2CID  11150290.
  54. ^ abc Bloch 2018, p. 26-28, §Ítem 7: Eliminar referencias a objetos obsoletos.
  55. ^ "NullPointerException". Oracle. Archivado desde el original el 6 de mayo de 2014. Consultado el 6 de mayo de 2014 .
  56. ^ "Excepciones en Java". Artima.com. Archivado desde el original el 21 de enero de 2009. Consultado el 10 de agosto de 2010 .
  57. ^ "Mejoras del rendimiento de la máquina virtual Java HotSpot™". Oracle.com. Archivado desde el original el 29 de mayo de 2017. Consultado el 26 de abril de 2017 .
  58. ^ "Sobrecarga de operadores (C# vs Java)". C# para desarrolladores de Java . Microsoft. Archivado desde el original el 7 de enero de 2015. Consultado el 10 de diciembre de 2014 .
  59. ^ "Herencia múltiple de estado, implementación y tipo". Tutoriales de Java . Oracle. Archivado desde el original el 9 de noviembre de 2014 . Consultado el 10 de diciembre de 2014 .
  60. ^ "API, características y opciones obsoletas". Oracle. Archivado desde el original el 19 de junio de 2019. Consultado el 31 de mayo de 2019 .
  61. ^ "Applet (Java Platform SE 7)". Docs . Oracle. Archivado desde el original el 2 de agosto de 2020 . Consultado el 1 de mayo de 2020 .
  62. ^ "¿Qué es una página JSP? - Tutorial de Java EE 5". docs.oracle.com . Archivado desde el original el 2 de agosto de 2020 . Consultado el 1 de mayo de 2020 .
  63. ^ "Trail: Creating a GUI With JFC/Swing (The Java Tutorials)" (Pista: Creación de una interfaz gráfica de usuario con JFC/Swing (Tutoriales de Java)). docs.oracle.com . Archivado desde el original el 29 de abril de 2020. Consultado el 1 de mayo de 2020 .
  64. ^ "Eliminado de JDK 11, JavaFX 11 llega como módulo independiente". InfoWorld . 20 de septiembre de 2018. Archivado desde el original el 14 de octubre de 2020 . Consultado el 13 de octubre de 2020 .
  65. ^ "Introducción a JavaFX: Hola mundo, estilo JavaFX". Tutoriales y documentación de JavaFX 2 . Oracle. Archivado desde el original el 2 de agosto de 2020 . Consultado el 1 de mayo de 2020 .
  66. ^ "Los sistemas de tipos de Java y Scala no son sólidos" (PDF) . Archivado (PDF) del original el 28 de noviembre de 2016 . Consultado el 20 de febrero de 2017 .
  67. ^ Arnold, Ken (27 de junio de 2005). «Los medicamentos genéricos se consideran nocivos». java.net. Archivado desde el original el 10 de octubre de 2007. Consultado el 10 de septiembre de 2015 .
  68. ^ Owens, Sean R. «Java y unsigned int, unsigned short, unsigned byte, unsigned long, etc. (o más bien, la falta de ellos)». Archivado desde el original el 20 de febrero de 2009. Consultado el 4 de julio de 2011 .
  69. ^ Kahan, William (1 de marzo de 1998). "Cómo el punto flotante de Java perjudica a todos en todas partes – Taller ACM 1998 sobre Java (Stanford)" (PDF) . Ingeniería eléctrica y ciencias de la computación, Universidad de California en Berkeley. Archivado (PDF) desde el original el 5 de septiembre de 2012. Consultado el 4 de junio de 2011 .
  70. ^ "¿Has comprobado el Java?". Archivado desde el original el 21 de septiembre de 2012. Consultado el 23 de diciembre de 2011 .
  71. ^ Chidester, Ashlan. API de persistencia de Java, Jenkins y AWS. ISBN 9798224253951. Recuperado el 16 de septiembre de 2024 .
  72. ^ Cadenhead, Rogers (20 de noviembre de 2017), Entender cómo funcionan los programas Java, archivado desde el original el 13 de agosto de 2021 , consultado el 26 de marzo de 2019
  73. ^ Woolf, Nicky (26 de mayo de 2016). «Google gana una batalla legal de seis años con Oracle por los derechos de autor del código de Android». The Guardian . ISSN  0261-3077. Archivado desde el original el 26 de marzo de 2019. Consultado el 26 de marzo de 2019 .
  74. ^ ab Bloch 2018, págs. 1–4, § 1 Introducción.
  75. ^ "java.nio (Plataforma Java SE 8)". docs.oracle.com .
  76. ^ "Redes Java". docs.oracle.com .
  77. ^ "HttpClient (Java SE 11 y JDK 11)". docs.oracle.com .
  78. ^ "Descripción general de Collections Framework". Documentación de Java . Oracle. Archivado desde el original el 31 de diciembre de 2014 . Consultado el 18 de diciembre de 2014 .
  79. ^ "Descripción general de la seguridad de Java". Documentación de Java . Oracle. Archivado desde el original el 3 de enero de 2015 . Consultado el 18 de diciembre de 2014 .
  80. ^ "Trail: Internationalization". Los tutoriales de Java . Oracle. Archivado desde el original el 31 de diciembre de 2014 . Consultado el 18 de diciembre de 2014 .
  81. ^ "Cómo escribir comentarios de documentos para la herramienta Javadoc". Oracle Technology Network . Oracle. Archivado desde el original el 18 de diciembre de 2014 . Consultado el 18 de diciembre de 2014 .
  82. ^ Niccolai, James (24 de enero de 2001). «Sun y Microsoft resuelven demanda por Java». JavaWorld . Servicio de noticias IDG . Archivado desde el original el 14 de julio de 2020 . Consultado el 13 de julio de 2020 .
  83. ^ van Gurp, Jilles (13 de noviembre de 2007). "Google Android: impresiones iniciales y críticas". Javalobby . Archivado desde el original el 28 de agosto de 2008. Consultado el 7 de marzo de 2009. Francamente, no entiendo por qué Google pretende ignorar la gran cantidad de implementaciones existentes. Me parece un caso grave de "no inventado aquí". En última instancia, esto ralentizará la adopción. Ya existen demasiadas plataformas Java para el mundo móvil y esta es otra más.
  84. ^ Mullin, Joe (7 de mayo de 2012). "Google culpable de infracción en el juicio de Oracle; se avecinan futuros dolores de cabeza legales". Law & Disorder . Ars Technica. Archivado desde el original el 8 de mayo de 2012 . Consultado el 8 de mayo de 2012 .
  85. ^ Mullin, Joe (31 de mayo de 2012). «Google gana una sentencia crucial sobre API, el caso de Oracle queda diezmado». Ars Technica . Archivado desde el original el 12 de marzo de 2017. Consultado el 1 de junio de 2012 .
  86. ^ Rosenblatt, Seth (9 de mayo de 2014). "La corte se pone del lado de Oracle en la apelación de patentes de Java sobre Android". CNET . Archivado desde el original el 10 de mayo de 2014 . Consultado el 10 de mayo de 2014 .
  87. ^ Mullin, Joe (26 de mayo de 2016). «Google supera a Oracle: Android hace un «uso justo» de las API de Java». Ars Technica . Archivado desde el original el 20 de enero de 2017 . Consultado el 26 de mayo de 2016 .
  88. ^ Farivar, Cyrus (27 de marzo de 2018). «"El uso que Google hizo de los paquetes de la API de Java no fue justo", dictamina el tribunal de apelaciones». Ars Technica . Archivado desde el original el 24 de septiembre de 2019 . Consultado el 6 de agosto de 2019 .
  89. ^ Lee, Timothy (23 de abril de 2019). «Google pide a la Corte Suprema que anule una sentencia desastrosa sobre los derechos de autor de las API». Ars Technica . Archivado desde el original el 23 de abril de 2019. Consultado el 23 de abril de 2019 .
  90. ^ "Google LLC v. Oracle America, Inc 593 US ____ (2021)" (PDF) . Archivado (PDF) del original el 5 de abril de 2021. Consultado el 6 de abril de 2021 .

Bibliografía

  • Bloch, Joshua (2018). "Effective Java: Programming Language Guide" (tercera edición). Addison-Wesley. ISBN 978-0-13-468599-1.
  • Gosling, James; Joy, Bill; Steele, Guy; Bracha, Gilad; Buckley, Alex (2014). The Java® Language Specification (PDF) (Java SE 8 ed.). Archivado (PDF) desde el original el 21 de octubre de 2014 . Consultado el 18 de noviembre de 2014 .
  • Gosling, James; Joy, Bill ; Steele, Guy L. Jr .; Bracha, Gilad (2005). La especificación del lenguaje Java (3.ª ed.). Addison-Wesley. ISBN 0-321-24678-0Archivado desde el original el 14 de febrero de 2012 . Consultado el 8 de febrero de 2019 .
  • Lindholm, Tim; Yellin, Frank (1999). La especificación de la máquina virtual Java (2.ª edición). Addison-Wesley. ISBN 0-201-43294-3Archivado desde el original el 25 de septiembre de 2011 . Consultado el 8 de febrero de 2019 .
  • La definición del diccionario de Java en Wikcionario
  • Medios relacionados con Java (lenguaje de programación) en Wikimedia Commons
  • Programación en Java en Wikilibros
  • Materiales de aprendizaje relacionados con Java en Wikiversidad
  • Java Semanal
Retrieved from "https://en.wikipedia.org/w/index.php?title=Java_(programming_language)&oldid=1252182388"