Paradigma | Multiparadigma : genérico , orientado a objetos ( basado en clases ), funcional , imperativo , reflexivo , concurrente |
---|---|
Diseñado por | James Gosling |
Revelador | Corporación Oracle |
Apareció por primera vez | 23 de mayo de 1995 ( 23 de mayo de 1995 ) | [1]
Disciplina de mecanografía | Estático, fuerte, seguro , nominativo , manifiesto |
Gestión de la memoria | Recolección automática de basura |
Extensiones de nombre de archivo | .java, .class , .jar , .jmod, .war |
Sitio web |
|
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 | |
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.
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]
Había cinco objetivos principales al crear el lenguaje Java: [17]
- Debe ser simple, orientado a objetos y familiar.
- Debe ser robusto y seguro.
- Debe ser neutral en cuanto a la arquitectura y portable.
- Debe ejecutarse con alto rendimiento.
- Debe ser interpretado , enhebrado y dinámico .
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ón | Fecha |
---|---|
Versión beta del JDK | 1995 |
JDK 1.0 | 23 de enero de 1996 [40] |
JDK 1.1 | 19 de febrero de 1997 |
J2SE 1.2 | 8 de diciembre de 1998 |
J2SE 1.3 | 8 de mayo de 2000 |
J2SE 1.4 | 6 de febrero de 2002 |
J2SE 5.0 | 30 de septiembre de 2004 |
Java SE 6 | 11 de diciembre de 2006 |
Java SE 7 | 28 de julio de 2011 |
Java SE 8 (LTS) | 18 de marzo de 2014 |
Java SE 9 | 21 de septiembre de 2017 |
Java SE 10 | 20 de marzo de 2018 |
Java SE 11 (LTS) | 25 de septiembre de 2018 [41] |
Java SE 12 | 19 de marzo de 2019 |
Java SE 13 | 17 de septiembre de 2019 |
Java SE 14 | 17 de marzo de 2020 |
Java SE 15 | 15 de septiembre de 2020 [42] |
Java SE 16 | 16 de marzo de 2021 |
Java SE 17 (LTS) | 14 de septiembre de 2021 |
Java SE 18 | 22 de marzo de 2022 |
Java SE 19 | 20 de septiembre de 2022 |
Java SE 20 | 21 de marzo de 2023 |
Java SE 21 (LTS) | 19 de septiembre de 2023 [43] |
Java SE 22 | 19 de marzo de 2024 |
Java SE 23 | 17 de septiembre de 2024 |
Ediciones de la plataforma Java |
---|
|
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.
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]
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.concurrent
paquete, 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.
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.
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.
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 printf
mé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.
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!" ); }}
This section needs additional citations for verification. (May 2019) |
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]
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.
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]
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]
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]
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 ClassCastException
se 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]
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]
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:
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]
This section needs additional citations for verification. (September 2023) |
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.
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.
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 ).
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]
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.
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.
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.
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.