De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

Java es una basada en la clase , orientado a objetos lenguaje de programación que está diseñado para tener el menor número de implementación dependencias como sea posible. Es un lenguaje de programación de propósito general destinado a permitir que los desarrolladores de aplicaciones escriban una vez, se ejecuten en cualquier lugar (WORA), [16] lo que significa que el código Java compilado puede ejecutarse en todas las plataformas que admiten Java sin necesidad de volver a compilarlo. [17] Las aplicaciones Java se compilan normalmente en un código de bytes que se puede ejecutar en cualquier máquina virtual Java (JVM) independientemente de la arquitectura de la computadora subyacente.. La sintaxis de Java es similar a C y C ++ , pero tiene menos funciones de bajo nivel que cualquiera de ellos. El tiempo de ejecución de Java proporciona capacidades dinámicas (como la reflexión y la modificación del código en tiempo de ejecución) que normalmente no están disponibles en los lenguajes compilados tradicionales. A partir de 2019 , Java era uno de los lenguajes de programación más populares en uso según GitHub , [18] [19] particularmente para aplicaciones web cliente-servidor , con un reporte de 9 millones de desarrolladores. [20]

Java fue desarrollado originalmente por James Gosling en Sun Microsystems ( que desde entonces ha sido adquirido por Oracle ) y lanzado en 1995 como un componente central de la plataforma Java de Sun Microsystems . Sun lanzó originalmente los compiladores de Java de implementación original y de referencia , las máquinas virtuales y las bibliotecas de clases bajo licencias propietarias . En mayo de 2007, de conformidad con las especificaciones del Proceso de la comunidad Java , Sun había vuelto a obtener la licencia de la mayoría de sus tecnologías Java bajo la Licencia Pública General GNU . Oracle ofrece su propio HotSpotJava Virtual Machine, sin embargo, la implementación de referencia oficial es OpenJDK JVM, que es un software gratuito de código abierto y es utilizado por la mayoría de los desarrolladores y es la JVM predeterminada para casi todas las distribuciones de Linux.

En marzo de 2021 , la última versión es Java 16 , con Java 11, una versión de soporte a largo plazo (LTS) actualmente admitida , lanzada el 25 de septiembre de 2018. Oracle lanzó la última actualización pública de costo cero para la versión heredada de Java 8 LTS en enero de 2019 para uso comercial, aunque de lo contrario seguirá siendo compatible con Java 8 con actualizaciones públicas para uso personal de forma indefinida. Otros proveedores han comenzado a ofrecer versiones sin costo de OpenJDK 8 y 11 que aún reciben seguridad y otras actualizaciones.

Oracle (y otros) recomiendan encarecidamente desinstalar las versiones obsoletas de Java debido a riesgos graves debido a problemas de seguridad no resueltos. [21] Dado que Java 9, 10, 12, 13, 14 y 15 ya no son compatibles, Oracle aconseja a sus usuarios que realicen la transición de inmediato a la última versión (actualmente Java 16) o una versión LTS.

Historia [ editar ]

Duke, la mascota de Java
James Gosling , el creador de Java, en 2008
El gráfico del índice de popularidad del lenguaje de programación TIOBE de 2002 a 2018. Java estuvo constantemente en la cima desde mediados de 2015 hasta principios de 2020.

James Gosling , Mike Sheridan y Patrick Naughton iniciaron el proyecto del lenguaje Java en junio de 1991. [22] 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. [23] El idioma se llamó inicialmente Oak en honor a un roble que se encontraba fuera de la oficina de Gosling. Más tarde, el proyecto pasó a llamarse Green y finalmente pasó a llamarse Java , de Java Coffee , un tipo de café de Indonesia . [24] Gosling diseñó Java con C / C ++sintaxis de estilo que los programadores de sistemas y aplicaciones encontrarían familiar. [25]

Sun Microsystems lanzó la primera implementación pública como Java 1.0 en 1996. [26] Prometió la funcionalidad Write Once, Run Anywhere ( 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 subprogramas de Java dentro de las 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. [27]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 presenta API optimizadas para aplicaciones móviles. La versión de escritorio pasó a llamarse J2SE. En 2006, con fines de marketing, 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 normas ISO / IEC JTC 1 y más tarde a Ecma International para formalizar Java, pero pronto se retiró del proceso. [28] [29] [30] Java sigue siendo un estándar de facto , controlado a través del Proceso de la Comunidad Java . [31] En un momento, Sun hizo que la mayoría de sus implementaciones de Java estuvieran disponibles sin cargo, a pesar de su estado de software propietario . Sun generó ingresos de Java mediante 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 Pública General GNU (GPL). El 8 de mayo de 2007, Sun finalizó el proceso, haciendo que todo el código central de su JVM estuviera disponible bajo términos de distribución de software libre / código abierto, además de una pequeña parte del código del cual Sun no tenía los derechos de autor. [32]

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

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

En enero de 2016, Oracle anunció que los entornos de ejecución de Java basados ​​en JDK 9 interrumpirán el complemento del navegador. [36]

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

Principios [ editar ]

Hubo cinco objetivos principales en la creación del lenguaje Java: [17]

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

Versiones [ editar ]

A partir de septiembre de 2020 , Java 8 y 11 son compatibles como versiones de soporte a largo plazo (LTS), y se admite una versión posterior que no sea LTS. [38] Principales versiones de lanzamiento de Java, junto con sus fechas de lanzamiento:

Ediciones [ editar ]

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

  • Java Card para tarjetas inteligentes. [42]
  • Java Platform, Micro Edition (Java ME): entornos de destino con recursos limitados. [43]
  • Java Platform, Standard Edition (Java SE): orientada a entornos de estaciones de trabajo. [44]
  • Java Platform, Enterprise Edition (Java EE): dirigido a grandes entornos empresariales distribuidos o de Internet. [45]

Las clases de las API de Java están organizadas en grupos separados llamados paquetes . Cada paquete contiene un conjunto de interfaces , clases, subpaquetes y excepciones relacionados .

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

Sistema de ejecución [ editar ]

JVM de Java y código de bytes [ editar ]

Uno de los objetivos del 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 un 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 Java , en lugar de directamente en el 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 diseñadas para 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 máquina para aplicaciones Java independientes, o en un navegador web paraSubprogramas 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 simplifica la migración. Sin embargo, la sobrecarga de interpretar el código de bytes en instrucciones de máquina hizo que los programas interpretados casi siempre se ejecutaran más lentamente que los ejecutables nativos . Los compiladores Just- In -Time (JIT) que compilan códigos de bytes en código de máquina durante el tiempo de ejecución se introdujeron desde una etapa temprana. Java en sí es independiente de la plataforma y está adaptado a la plataforma particular en la que se ejecutará mediante una máquina virtual Java (JVM), que traduce el código de bytes de Java al lenguaje de máquina de la plataforma. [46]

Rendimiento [ editar ]

Los programas escritos en Java tienen la reputación de ser más lentos y requerir más memoria que los escritos en C ++ . [47] [48] 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 , [49] la adición de características de 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 que se convirtió en la JVM predeterminada de Sun en 2000. Con Java 1.5, el rendimiento se mejoró con la adición del paquete java.util.concurrent, incluidas las implementaciones sin bloqueo delConcurrentMaps y otras colecciones de múltiples núcleos, y se mejoró aún más con Java 1.6.

No JVM [ editar ]

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 una máquina virtual de Java de software, [50] 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 principalmente en las implementaciones actuales de ARM.

Gestión automática de memoria [ editar ]

Java utiliza un recolector de basura automático para administrar la memoria en el ciclo de vida del objeto . El programador determina cuándo se crean los objetos y el tiempo de ejecución de Java es responsable de recuperar la memoria una vez que los objetos ya no están en uso. 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 puede ocurrir si el código de un programador contiene una referencia a un objeto que ya no se necesita, normalmente cuando los objetos que ya no se necesitan se almacenan en contenedores que todavía están en uso. Si se llaman métodos para un objeto inexistente, se lanza una excepción de puntero nulo . [51] [52]

Una de las ideas detrás del modelo de gestión automática de memoria de Java es que los programadores pueden evitarse la carga de tener que realizar una gestió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 recae en el programador. Si el programa no desasigna un objeto, se produce una pérdida de memoria . Si el programa intenta acceder o desasignar memoria que ya ha sido desasignada, el resultado no está definido y es 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 gastos generales y complejidad. Tenga en cuenta que la recolección de basura no evita las pérdidas de memoria lógica , es decir, aquellas en las que la memoria todavía se hace referencia pero nunca se usa.

La recolección de basura puede ocurrir en cualquier momento. Idealmente, ocurrirá 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 de memoria explícita no es posible en Java.

Java no es compatible con la aritmética de punteros de 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 basura reubique los objetos referenciados y garantiza la seguridad de los tipos.

Como en C ++ y algunos 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 ser cierto para datos no primitivos. tipos (pero consulte el análisis de escape ). Esta fue una decisión consciente de los diseñadores de Java por motivos de rendimiento.

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

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

Sintaxis [ editar ]

Gráfico de dependencia de las clases de Java Core (creado con jdeps y Gephi )

La sintaxis de Java está en gran medida influenciada por C ++ y C . A diferencia de C ++, que combina la sintaxis de la programación estructurada, genérica y orientada a objetos, Java se construyó casi exclusivamente como un lenguaje orientado a objetos. [17] Todo el código se escribe dentro de clases y cada elemento de datos es un objeto, con la excepción de los tipos de datos primitivos (es decir, 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 [54] ni la herencia múltiple para las clases, aunque la herencia múltiple es compatible con las interfaces . [55]

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

Ejemplo de Hola mundo [ editar ]

El programa tradicional Hola mundo se puede escribir en Java como: [56]

public  class  HelloWorldApp  {  public  static  void  main ( String []  args )  {  System . fuera . println ( "¡Hola mundo!" );  // Imprime la cadena en la consola.  } }

Todos los archivos de origen deberán llevar el nombre de la clase pública que contienen, añadiendo el sufijo .java, por ejemplo, HelloWorldApp.java. Primero debe compilarse en código de bytes, utilizando un compilador de Java , produciendo un archivo con el .classsufijo ( HelloWorldApp.class, en este caso). Solo entonces se puede ejecutar o lanzar. El archivo fuente de Java solo puede contener una clase pública, pero puede contener varias clases con un modificador de acceso no público y cualquier número de clases internas públicas . Cuando el archivo fuente contiene varias clases, es necesario hacer classpública una clase (introducida por la palabra clave) (precedida por la publicpalabra clave) y nombrar el archivo fuente con ese nombre de clase pública.

Una clase que no se declara pública puede almacenarse en cualquier .javaarchivo. El compilador generará un archivo de clase para cada clase definida en el archivo fuente. El nombre del archivo de clase es el nombre de la clase, con .class añadido. Para la generación de archivos de clase, las clases anónimas se tratan como si su nombre fuera la concatenación del nombre de su clase adjunta, un $ y un entero.

La palabra clave public denota que se puede llamar a un método desde el código en otras clases, o que una clase puede ser utilizada por clases fuera de la jerarquía de clases. La jerarquía de clases está relacionada con el nombre del directorio en el que se encuentra el archivo .java. Esto se denomina modificador de nivel de acceso. Otros modificadores de nivel de acceso incluyen las palabras clave private(un método al que solo se puede acceder en la misma clase) y protected(que permite acceder al código del mismo paquete). Si un fragmento de código intenta acceder a métodos privados o métodos protegidos, la JVM lanzará unSecurityException

La palabra clave static[18] delante de un método indica un método estático , que está asociado solo con la clase y no con ninguna instancia específica de esa clase. Solo se pueden invocar métodos estáticos sin una referencia a un objeto. Los métodos estáticos no pueden acceder a ningún miembro de clase que no sea también estático. Los métodos que no se designan como estáticos son métodos de instancia y requieren una instancia específica de una clase para funcionar.

La palabra clave voidindica que el método principal no devuelve ningún valor a la persona que llama. Si un programa Java va a salir con un código de error, debe llamar a System.exit () explícitamente.

El nombre del método mainno es una palabra clave en el lenguaje Java. Es simplemente el nombre del método que llama el lanzador de Java para pasar el control al programa. Las clases de Java que se ejecutan en entornos gestionados como applets y Enterprise JavaBeans no utilizan ni necesitan un main()método. Un programa Java puede contener varias clases que tienen mainmétodos, lo que significa que se debe indicar explícitamente a la máquina virtual desde qué clase iniciar.

El método principal debe aceptar una matriz de Stringobjetos. Por convención, se hace referencia a él como argssi se pudiera utilizar cualquier otro nombre de identificador legal. Desde Java 5, el método principal también puede usar argumentos variables , en forma de public static void main(String... args), permitiendo que el método principal sea invocado con un número arbitrario de Stringargumentos. El efecto de esta declaración alternativa es semánticamente idéntico (al argsparámetro que sigue siendo una matriz de Stringobjetos), pero permite una sintaxis alternativa para crear y pasar la matriz.

El lanzador de Java lanza Java cargando una clase determinada (especificada en la línea de comando o como un atributo en un JAR ) e iniciando su public static void main(String[])método. Los programas independientes deben declarar este método explícitamente. El String[] argsparámetro es una matriz de Stringobjetos que contiene los argumentos pasados ​​a la clase. Los parámetros a mainse pasan a menudo por medio de una línea de comando .

La impresión es parte de una biblioteca estándar de Java: la Systemclase define un campo estático público llamado out. El outobjeto es una instancia de la PrintStreamclase y proporciona muchos métodos para imprimir datos en la salida estándar , incluido el println(String)que también agrega una nueva línea a la cadena pasada .

El "Hello World!"compilador convierte automáticamente la cadena en un objeto String.

Ejemplo con métodos [ editar ]

// Este es un ejemplo de un comentario de una sola línea con dos barras/ * * Este es un ejemplo de un comentario de varias líneas usando la barra y el asterisco. * Este tipo de comentario se puede utilizar para contener mucha información o desactivar * código, pero es muy importante recordar cerrar el comentario. * /paquete de  fibsandlies ;import  java.util.Map ; import  java.util.HashMap ;/ ** * Este es un ejemplo de un comentario de Javadoc; Javadoc puede compilar documentación * a partir de este texto. Los comentarios de Javadoc deben preceder inmediatamente a la clase, método * o campo que se está documentando. * @Author Wikipedia Voluntarios * / público  de clase  FibCalculator  extiende  Fibonacci  implementos  Calculadora  {  privada  estática  Mapa < Integer ,  Entero >  memoized  =  nuevo  HashMap <> (); / *  * El método principal escrito de la siguiente manera es utilizado por la JVM como punto de partida  * para el programa.  * /  public  static  void  main ( String []  args )  {  memoized . poner ( 1 ,  1 );  memorizado . poner ( 2 ,  1 );  Sistema . fuera . println ( fibonacci ( 12 ));  // Obtenga el número 12 de Fibonacci e imprima en la consola  } / **  * Un ejemplo de un método escrito en Java, incluido en una clase.  * Dado un número no negativo FIBINDEX, devuelve  * el número N de Fibonacci, donde N es igual a FIBINDEX.  *  * @param fibIndex El índice del número de Fibonacci  * @return el número de Fibonacci  * /  public  static  int  fibonacci ( int  fibIndex )  {  if  ( memoized . containsKey ( fibIndex ))  return  memoized . obtener ( fibIndex );  else  {  int respuesta  =  fibonacci ( fibIndex  -  1 )  +  fibonacci ( fibIndex  -  2 );  memorizado . poner ( fibIndex ,  respuesta );  devolver  respuesta ;  }  } }

Clases especiales [ editar ]

Applet [ editar ]

Los subprogramas de Java eran programas integrados en otras aplicaciones, normalmente en una página web que se muestra en un navegador web. La API del subprograma de Java ahora está obsoleta desde Java 8 en 2017. [57] [58]

Servlet [ editar ]

La tecnología de servlet de Java proporciona a los desarrolladores web un mecanismo simple y coherente para ampliar la funcionalidad de un servidor web y para acceder a los sistemas comerciales 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 solicitudes HTTP , aunque hay otras clases de servlets estándar disponibles, por ejemplo, para la comunicación WebSocket .

La API de servlet de Java ha sido hasta cierto punto reemplazada (pero aún se usa bajo el capó) por dos tecnologías estándar de Java para servicios web:

  • la API de Java para servicios web RESTful (JAX-RS 2.0) útil para servicios AJAX, JSON y REST, y
  • la API de Java para servicios web XML (JAX-WS) útil para los servicios web SOAP .

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 de servicio web para la lógica empresarial real.

Páginas de JavaServer [ editar ]

Las páginas JavaServer (JSP) son componentes Java EE del lado del servidor que generan respuestas, normalmente páginas HTML , a las solicitudes HTTP de los clientes . Las JSP incorporan código Java en una página HTML mediante 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. [59]

Aplicación swing [ editar ]

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 y sensación conectable de Swing. Sun suministra los clones de Windows , GTK + y Motif . Apple también ofrece un aspecto y una sensación Aqua para macOS . Donde 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. [60]

Aplicación JavaFX [ editar ]

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 cambio, en un módulo separado. [61] JavaFX tiene soporte para computadoras de escritorio y navegadores web en Microsoft Windows , Linux y macOS . JavaFX no es compatible con la apariencia del sistema operativo nativo. [62]

Genéricos [ editar ]

En 2004, se agregaron genéricos al lenguaje Java, como parte de J2SE 5.0. Antes de la introducción de genéricos, cada declaración de variable tenía que ser de un tipo específico. Para las clases de contenedor, por ejemplo, esto es un problema porque no hay una manera fácil de crear un contenedor que acepte solo tipos específicos de objetos. O el contenedor opera en todos los subtipos de una clase o interfaz, por lo general Object, o se debe crear una clase de contenedor diferente para cada clase contenida. Los genéricos permiten la verificación de tipos en tiempo de compilación sin tener que crear muchas clases de contenedor, 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 determinadas excepciones en tiempo de ejecución mediante la emisión de errores en tiempo de compilación. Si Java evitó todos los errores de tipo de tiempo de ejecución (ClassCastExceptions) de ocurrir, sería de tipo seguro .

En 2016, se demostró que el sistema de tipos de Java no era sólido . [63]

Crítica [ editar ]

Las críticas dirigidas a Java incluyen la implementación de genéricos, [64] velocidad, [65] el manejo de números sin firmar, [66] la implementación de aritmética de punto flotante, [67] y un historial de vulnerabilidades de seguridad en la implementación primaria de Java VM. HotSpot . [68]

Bibliotecas de clases [ editar ]

La biblioteca de clases de Java es la biblioteca estándar , desarrollada para admitir el desarrollo de aplicaciones en Java. Oracle lo controla en cooperación con otros a través del programa Java Community Process . [69] 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. [70] La biblioteca de clases contiene características como:

  • Las bibliotecas centrales, que incluyen:
    • IO / NIO
    • Redes (NOTA: nuevo cliente HTTP desde Java 11)
    • Reflexión
    • Concurrencia
    • Genéricos
    • Secuencias de comandos / compilador
    • Programación funcional (Lambda, Streaming)
    • Bibliotecas de colección que implementan estructuras de datos como listas , diccionarios , árboles , conjuntos , colas y colas de dos extremos , o pilas [71]
    • Bibliotecas de procesamiento XML (análisis, transformación, validación)
    • Seguridad [72]
    • Bibliotecas de internacionalización y localización [73]
  • Las bibliotecas de integración, que permiten al escritor de aplicaciones comunicarse con sistemas externos. Estas bibliotecas incluyen:
    • La API de Java Database Connectivity (JDBC) para el acceso a la base de datos
    • Interfaz de directorio y nombres Java (JNDI) para búsqueda y descubrimiento
    • RMI y CORBA para el desarrollo de aplicaciones distribuidas
    • JMX para administrar y monitorear aplicaciones
  • Bibliotecas de interfaz de usuario , que incluyen:
    • El kit de herramientas de ventana abstracta (AWT) (pesado o nativo ) , que proporciona componentes GUI , los medios para diseñar esos componentes y los medios para manejar eventos de esos componentes
    • Las bibliotecas Swing (ligeras) , que se basan en AWT pero proporcionan implementaciones (no nativas) del widgetry AWT
    • API para captura, procesamiento y reproducción de audio
    • JavaFX
  • Una implementación dependiente de la plataforma de la máquina virtual Java que es el medio por el cual se ejecutan los códigos de bytes de las bibliotecas Java y las aplicaciones de terceros.
  • Complementos, que permiten ejecutar applets en navegadores web.
  • Java Web Start , que permite que las aplicaciones Java se distribuyan de manera eficiente a los usuarios finales a través de Internet
  • Licencias y documentación

Documentación [ editar ]

Javadoc es un sistema de documentación completo, 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 se destacan con los delimitadores /*y */, y los comentarios de una sola línea comienzan con la línea //. [74]

Implementaciones [ editar ]

Oracle Corporation es el propietario actual de la implementación oficial de la plataforma Java SE, tras la adquisición de Sun Microsystems el 27 de enero de 2010. Esta implementación se basa en la implementación original de Java por Sun. La implementación de Oracle está disponible para Microsoft Windows (todavía funciona para XP, mientras que actualmente solo las versiones posteriores son compatibles oficialmente), 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 está empaquetada 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 usuarios finales, y Java Development Kit (JDK), que está destinado a para desarrolladores de software e incluye herramientas de desarrollo como el compilador Java , Javadoc , Jar y un depurador . Oracle también ha lanzado GraalVM , un compilador e intérprete dinámico Java de alto rendimiento.

OpenJDK es otra implementación notable de Java SE con licencia GNU GPL. La implementación comenzó cuando Sun comenzó a publicar el código fuente de Java bajo la 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 afirmó que la implementación de Microsoft no era compatible con RMI o 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 20 millones de dólares estadounidenses, así como una orden judicial para hacer cumplir los términos de la licencia de Sun. [75] Como resultado, Microsoft ya no distribuye Java con Windows .

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 portátiles del lado del servidor.

Usar fuera de la plataforma Java [ editar ]

El lenguaje de programación Java requiere la presencia de una plataforma de software para que se ejecuten 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 de Android con su propio sistema GUI.

Android [ editar ]

El sistema operativo Android hace un uso extensivo de la tecnología relacionada con Java.

El lenguaje Java es un pilar clave en Android , un sistema operativo móvil de código abierto . Aunque Android, construido sobre el kernel de Linux , está escrito principalmente en C, el SDK de Android usa el lenguaje Java como base para las aplicaciones de Android, pero no usa ninguno de sus GUI estándar, SE, ME u otros estándares Java establecidos. [76] El lenguaje de código de bytes admitido por el SDK de Android es incompatible con el código de bytes 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 código de bytes es interpretado por la máquina virtual Dalviko compilado en código nativo por 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. 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 [ editar ]

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 tener derechos de autor, entonces Google había infringido los derechos de autor de Oracle mediante el uso de Java en dispositivos Android. [77] El juez de distrito William Alsup dictaminó el 31 de mayo de 2012 que las API no pueden tener derechos de autor, [78] pero esto fue revocado por la Corte de Apelaciones del Circuito Federal de los Estados Unidos en mayo de 2014. [79] El 26 de mayo de 2016. , el tribunal de distrito falló a favor de Google y dictaminó que la infracción de derechos de autor de la API de Java en Android constituye un uso justo. [80]En marzo de 2018, este fallo fue revocado por la Corte de Apelaciones, que remitió el caso de determinación de los daños al tribunal federal de San Francisco. [81] Google presentó una petición de auto de certiorari ante la Corte Suprema de los Estados Unidos en enero de 2019 para impugnar las dos sentencias dictadas por la Corte de Apelaciones a favor de Oracle. [82]

Ver también [ editar ]

  • C#
  • C ++
  • Dalvik , utilizado en versiones antiguas de Android, reemplazado por Android Runtime que no es JIT
  • Java paralelo determinista
  • Lista de máquinas virtuales Java
  • Lista de API de Java
  • Lista de lenguajes JVM

Comparación de Java con otros lenguajes [ editar ]

  • Comparación de C # y Java
  • Comparación de Java y C ++

Referencias [ editar ]

  1. ^ Binstock, Andrew (20 de mayo de 2015). "20 años de innovación de Java" . Forbes . Archivado desde el original el 14 de marzo de 2016 . Consultado el 18 de marzo de 2016 .
  2. ↑ a b c d 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 9780201657685.
  3. ^ Chaudhary, Harry H. (28 de julio de 2014). "Cracking The Java Programming Interview :: 2000+ Java Interview Que / Ans" . Consultado el 29 de mayo de 2016 .
  4. ^ Java 5.0 agregó varias características de lenguaje nuevas (las mejoradas para bucle , autoboxing , varargs y anotaciones ), después de que se introdujeran en ellenguaje C # similar (y competidor). [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. ^ "La AZ de los lenguajes de programación: Modula-3" . Computerworld.com.au. 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ú" .), que el equipo de diseño de Sun Java obtuvo la licencia de las fuentes del compilador de Oberon varios años antes del lanzamiento de Java y lo examinó: compacidad (relativa), seguridad de tipos, recolección de basura, sin herencia múltiple para las clases: todos estos diseños generales clave Java y Oberon comparten funciones.
  9. ^ Patrick Naughton cita 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 Objective-C) y clases de envoltura primitivas. [3] Archivado el 13 de julio de 2011 en la Wayback Machine.
  10. ^ Investigación de TechMetrix (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 con el nombre verde y el lenguaje se basó en un modelo antiguo 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. ^ En el verano de 1996, Sun estaba diseñando el precursor de lo que ahora es el modelo de eventos del AWT y la arquitectura de componentes JavaBeans. Borland contribuyó enormemente a este proceso. Analizamos con detenimiento Delphi Object Pascal y construimos un prototipo funcional de referencias de métodos enlazados para comprender su interacción con el lenguaje de programación Java y sus API. Libro blanco sobre los delegados de Microsoft
  13. ^ "Especificaciones de la capilla (Agradecimientos)" (PDF) . Cray Inc. 1 de octubre de 2015. Archivado (PDF) desde el 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 la escritura estática 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. ^ "¿Escribir una vez, correr a cualquier parte?" . Computer Weekly . 2 de mayo de 2002 . Consultado el 27 de julio de 2009 .
  17. ^ a b c "1.2 Objetivos de diseño del lenguaje de programación Java ™" . Oráculo. 1 de enero de 1999. Archivado desde el original el 23 de enero de 2013 . Consultado el 14 de enero de 2013 .
  18. ↑ a b McMillan, Robert (1 de agosto de 2013). "¿Java está perdiendo su mojo?" . wired.com . Archivado desde el original el 15 de febrero de 2017 . Consultado el 8 de marzo de 2017 . Java está en decadencia, al menos de acuerdo con un equipo que vigila el cambiante mundo de los lenguajes de programación de computadoras. Durante más de una década, ha dominado el índice de la comunidad de programación TIOBE y ha vuelto a la cima: una instantánea del entusiasmo de los desarrolladores de software que analiza cosas como los resultados de búsqueda en Internet para medir la repercusión que tienen los diferentes idiomas. Pero últimamente, Java se ha estado deslizando.
  19. ^ Chan, Rosalie (22 de enero de 2019). "Los 10 lenguajes de programación más populares, según el 'Facebook para programadores ' " . Business Insider . Archivado desde el original el 29 de junio de 2019 . Consultado el 29 de junio de 2019 .
  20. ^ "Revisión de JavaOne 2013: Java adquiere el Internet de las cosas" . www.oracle.com . Archivado desde el original el 19 de abril de 2016 . Consultado el 19 de junio de 2016 . URL alternativa
  21. ^ "¿Por qué debería desinstalar versiones anteriores de Java de mi sistema?" . Oracle . Consultado el 9 de septiembre de 2016 .
  22. ^ 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 .
  23. ^ 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 .
  24. ^ Murphy, Kieron (4 de octubre de 1996). "Entonces, ¿por qué decidieron llamarlo Java?" . JavaWorld . Consultado el 13 de julio de 2020 .
  25. ^ Kabutz, Heinz; Once Upon an Oak Archivado el 13 de abril de 2007 en Wayback Machine . Artima. Consultado el 29 de abril de 2007.
  26. ^ "JAVASOFT SHIPS JAVA 1.0" . Archivado desde el original el 10 de marzo de 2007 . Consultado el 13 de mayo de 2018 .
  27. ^ Programación orientada a objetos con Java: Fundamentos y aplicaciones . Educación de Tata McGraw-Hill. pag. 34.
  28. ^ "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 .
  29. ^ "Por qué Java ™ no se estandarizó dos veces" (PDF) . Archivado (PDF) desde el original el 13 de enero de 2014 . Consultado el 3 de junio de 2018 .
  30. ^ "Qué es ECMA y por qué Microsoft se preocupa" . Archivado desde el original el 6 de mayo de 2014 . Consultado el 6 de mayo de 2014 .
  31. ^ "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 .
  32. ^ "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 .
  33. ^ "Papel evolutivo del sol como evangelista de Java" . O'Reilly Media . Archivado desde el original el 15 de septiembre de 2010 . Consultado el 2 de agosto de 2009 .
  34. ^ "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 partidario principal y sustancial 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.
  35. ^ Gosling, James (9 de abril de 2010). "Es hora de seguir adelante ..." En un nuevo camino . Archivado desde el original el 5 de noviembre de 2010 . Consultado el 16 de noviembre de 2011 .
  36. ^ Tema, Dalibor. "Pasar a una Web sin complementos" . Archivado desde el original el 16 de marzo de 2016 . Consultado el 15 de marzo de 2016 .
  37. ^ "Aprenda sobre la tecnología Java" . Oráculo. Archivado desde el original el 24 de noviembre de 2011 . Consultado el 21 de noviembre de 2011 .
  38. ^ "Hoja de ruta de soporte de Oracle Java SE" . Oráculo. 13 de mayo de 2020 . Consultado el 11 de diciembre de 2020 .
  39. ^ "JAVASOFT SHIPS JAVA 1.0" . sun.com . Archivado desde el original el 10 de marzo de 2007 . Consultado el 5 de febrero de 2008 .
  40. ^ Chander, Sharat. "Presentación de Java SE 11" . oracle.com . Archivado desde el original el 26 de septiembre de 2018 . Consultado el 26 de septiembre de 2018 .
  41. ^ "¡La llegada de Java 15!" . Oracle . 15 de septiembre de 2020 . Consultado el 15 de septiembre de 2020 .
  42. ^ "Descripción general de la tarjeta Java" . Red de tecnología de Oracle . Oráculo. Archivado desde el original el 7 de enero de 2015 . Consultado el 18 de diciembre de 2014 .
  43. ^ "Plataforma Java, Micro Edition (Java ME)" . Red de tecnología de Oracle . Oráculo. Archivado desde el original el 4 de enero de 2015 . Consultado el 18 de diciembre de 2014 .
  44. ^ "Java SE" . Red de tecnología de Oracle . Oráculo. Archivado desde el original el 24 de diciembre de 2014 . Consultado el 18 de diciembre de 2014 .
  45. ^ "Plataforma Java, Enterprise Edition (Java EE)" . Red de tecnología de Oracle . Oráculo. Archivado desde el original el 17 de diciembre de 2014 . Consultado el 18 de diciembre de 2014 .
  46. ^ "¿Es la plataforma JVM (Java Virtual Machine) dependiente o independiente de la plataforma? ¿Cuál es la ventaja de usar la JVM y que Java sea un idioma traducido?" . Entrevista al programador. Archivado desde el original el 19 de enero de 2015 . Consultado el 19 de enero de 2015 .
  47. ^ 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 .
  48. ^ Google. "Reconocimiento de bucles en C ++ / Java / Go / Scala" (PDF) . Consultado el 12 de julio de 2012 .
  49. ^ "El compilador 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 .
  50. ^ 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". Transacciones ACM sobre Automatización del Diseño de Sistemas Electrónicos . 22 (4): 73. doi : 10.1145 / 3073416 . ISSN 1084-4309 . S2CID 11150290 .  
  51. ^ "NullPointerException" . Oráculo. Archivado desde el original el 6 de mayo de 2014 . Consultado el 6 de mayo de 2014 .
  52. ^ "Excepciones en Java" . Artima.com. Archivado desde el original el 21 de enero de 2009 . Consultado el 10 de agosto de 2010 .
  53. ^ "Mejoras en el 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 .
  54. ^ "Sobrecarga del operador (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 .
  55. ^ "Herencia múltiple de estado, implementación y tipo" . Los tutoriales de Java ™ . Oráculo. Archivado desde el original el 9 de noviembre de 2014 . Consultado el 10 de diciembre de 2014 .
  56. ^ "Lección: una mirada más cercana a la aplicación Hello World" . Tutoriales de Java ™> Introducción . Oracle Corporation . Archivado desde el original el 17 de marzo de 2011 . Consultado el 14 de abril de 2011 .
  57. ^ "API, características y opciones obsoletas" . www.oracle.com . Consultado el 31 de mayo de 2019 .
  58. ^ "Applet (Java Platform SE 7)" . docs.oracle.com . Consultado el 1 de mayo de 2020 .
  59. ^ "¿Qué es una página JSP? - El tutorial de Java EE 5" . docs.oracle.com . Consultado el 1 de mayo de 2020 .
  60. ^ "Sendero: creación de una GUI con JFC / Swing (los tutoriales de Java ™)" . docs.oracle.com . Consultado el 1 de mayo de 2020 .
  61. ^ "Eliminado de JDK 11, JavaFX 11 llega como módulo independiente" . Consultado el 13 de octubre de 2020 .
  62. ^ "Introducción a JavaFX: Hola mundo, estilo JavaFX | Tutoriales y documentación de JavaFX 2" . docs.oracle.com . Consultado el 1 de mayo de 2020 .
  63. ^ "Los sistemas de tipos de Java y Scala no son sólidos" (PDF) . Archivado (PDF) desde el original el 28 de noviembre de 2016 . Consultado el 20 de febrero de 2017 .
  64. ^ Arnold, Ken. "Genéricos considerados nocivos" . java.net. Archivado desde el original el 10 de octubre de 2007 . Consultado el 10 de septiembre de 2015 . Más comentarios sobre el artículo original disponibles en instantáneas de archivo anteriores.
  65. ^ Jelovic, Dejan. "Por qué Java siempre será más lento que C ++" . www.jelovic.com. Archivado desde el original el 11 de febrero de 2008 . Consultado el 17 de octubre de 2012 .
  66. ^ 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 .
  67. ^ Kahan, William. "Cómo el punto flotante de Java perjudica a todos en todas partes" (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 .
  68. ^ "¿Ha comprobado Java?" . Archivado desde el original el 21 de septiembre de 2012 . Consultado el 23 de diciembre de 2011 .
  69. ^ Cadenhead, Rogers (20 de noviembre de 2017), Comprensión de cómo funcionan los programas de Java , consultado el 26 de marzo de 2019
  70. ^ Woolf, Nicky (26 de mayo de 2016). "Google gana una batalla legal de seis años con Oracle sobre los derechos de autor del código de Android" . The Guardian . ISSN 0261-3077 . Consultado el 26 de marzo de 2019 . 
  71. ^ "Resumen del marco de colecciones" . Documentación de Java . Oráculo. Archivado desde el original el 31 de diciembre de 2014 . Consultado el 18 de diciembre de 2014 .
  72. ^ "Descripción general de seguridad de Java ™" . Documentación de Java . Oráculo. Archivado desde el original el 3 de enero de 2015 . Consultado el 18 de diciembre de 2014 .
  73. ^ "Sendero: internacionalización" . Los tutoriales de Java ™ . Oráculo. Archivado desde el original el 31 de diciembre de 2014 . Consultado el 18 de diciembre de 2014 .
  74. ^ "Cómo escribir comentarios de documentos para la herramienta Javadoc" . Red de tecnología de Oracle . Oráculo. Archivado desde el original el 18 de diciembre de 2014 . Consultado el 18 de diciembre de 2014 .
  75. ^ Niccolai, James (24 de enero de 2001). "Sun, Microsoft resuelve demanda de Java" . JavaWorld . Servicio de noticias IDG . Consultado el 13 de julio de 2020 .
  76. ^ van Gurp, Jilles (13 de noviembre de 2007). "Google Android: impresiones iniciales y críticas" . Javalobby . Consultado el 7 de marzo de 2009 . Francamente, no entiendo por qué Google tiene la intención de ignorar la gran cantidad de implementación existente. Me parece un mal caso de "no inventado aquí". En última instancia, esto ralentizará la adopción. Ya hay demasiadas plataformas Java para el mundo móvil y esta es otra.
  77. ^ Mullin, Joe. "Google culpable de infracción en el juicio de Oracle; se avecinan futuros dolores de cabeza legales" . Ley y desorden . Ars Technica. Archivado desde el original el 8 de mayo de 2012 . Consultado el 8 de mayo de 2012 .
  78. ^ Mullin, Joe (31 de mayo de 2012). "Google gana el fallo crucial de la API, el caso de Oracle diezmado" . Ars Technica . Archivado desde el original el 12 de marzo de 2017 . Consultado el 1 de junio de 2012 .
  79. ^ Rosenblatt, Seth (9 de mayo de 2014). "Corte se pone del lado de Oracle sobre Android en apelación de patente de Java" . CNET . Archivado desde el original el 10 de mayo de 2014 . Consultado el 10 de mayo de 2014 .
  80. ^ 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 .
  81. ^ Farivar, Cyrus (27 de marzo de 2018). " " El uso de Google de los paquetes API de Java no fue justo, "reglas de la corte de apelaciones" . Ars Technica . Consultado el 6 de agosto de 2019 .
  82. ^ Lee, Timothy (23 de abril de 2019). "Google pide a la Corte Suprema que anule el desastroso fallo sobre los derechos de autor de la API" . Ars Technica . Consultado el 23 de abril de 2019 .

Obras citadas [ editar ]

  • Gosling, James; Joy, Bill; Steele, Guy; Bracha, Gilad; Buckley, Alex (2014). La especificación del lenguaje Java® (PDF) (Java SE 8 ed.).
  • 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-0.
  • Lindholm, Tim; Yellin, Frank (1999). La especificación de la máquina virtual de Java (2ª ed.). Addison-Wesley. ISBN 0-201-43294-3.

Enlaces externos [ editar ]

  • La definición del diccionario de Java en Wiktionary
  • Medios relacionados con Java en Wikimedia Commons
  • Java en Wikilibros
  • Materiales de aprendizaje relacionados con Java en Wikiversity