La biblioteca de clases Java ( JCL ) es un conjunto de bibliotecas que se pueden cargar dinámicamente y que los lenguajes de la máquina virtual Java (JVM) pueden llamar en tiempo de ejecución . Debido a que la plataforma Java no depende de un sistema operativo específico , las aplicaciones no pueden depender de ninguna de las bibliotecas nativas de la plataforma. En cambio, la plataforma Java proporciona un conjunto completo de bibliotecas de clases estándar , que contienen las funciones comunes a los sistemas operativos modernos.
JCL cumple tres propósitos dentro de la JVM:
- Al igual que otras bibliotecas de código estándar , proporcionan al programador un conjunto conocido de funciones útiles, como clases contenedoras y procesamiento de expresiones regulares .
- La biblioteca proporciona una interfaz abstracta para tareas que normalmente dependerían en gran medida del hardware y del sistema operativo, como el acceso a la red y al acceso a archivos .
- Es posible que algunas plataformas subyacentes no admitan todas las funciones que espera una aplicación Java. En estos casos, la implementación de la biblioteca puede emular esas funciones o proporcionar una forma consistente de verificar la presencia de una función específica.
Implementación y configuración
JCL está escrito casi en su totalidad en Java, a excepción de las partes que necesitan acceso directo al hardware y al sistema operativo (como para E/S o gráficos de mapa de bits ). Las clases que dan acceso a estas funciones suelen utilizar contenedores de interfaz nativa de Java para acceder a las API del sistema operativo .
Casi todo el JCL se almacena en un único archivo de Java llamado "rt.jar", que se proporciona con las distribuciones JRE y JDK . La biblioteca de clases Java (rt.jar) se encuentra en la ruta de clases de arranque predeterminada [1] y no tiene por qué aparecer en la ruta de clases declarada para la aplicación. El entorno de ejecución utiliza el cargador de clases de arranque para encontrar el JCL.
El sistema de módulos Java (parte de la versión Java 9 ) rompió el archivo JAR monolítico "rt.jar" y modularizó el propio JCL en varios módulos con dependencias específicas. [2]
Conformidad
Cualquier implementación de Java debe pasar las pruebas del Kit de compatibilidad de tecnología Java para comprobar su conformidad, que incluye las pruebas JCL.
Características principales
Se accede a las características de JCL a través de clases proporcionadas en paquetes .
java.lang
contiene clases e interfaces fundamentales estrechamente vinculadas al lenguaje y al sistema de ejecución .- La E/S y la red acceden al sistema de archivos de la plataforma y, en términos más generales, a las redes a través de los
java.io
paquetes java.nio
y java.net
. Para las redes, SCTP está disponible a través de com.sun.nio.sctp
. - Paquete de matemáticas :
java.math
proporciona expresiones matemáticas y evaluación, así como tipos de datos de números enteros y decimales de precisión arbitraria. - Colecciones y utilidades: estructuras de datos de colección integradas y clases de utilidad para expresiones regulares , simultaneidad , registro y compresión de datos .
- GUI y gráficos 2D : el paquete AWT
java.awt
( ) realiza operaciones básicas de GUI y se vincula al sistema nativo subyacente. También contiene la API de gráficos 2D. El paquete Swing ( ) está basado en AWT y proporciona un kit de herramientas de widgetsjavax.swing
independiente de la plataforma , así como una apariencia y un funcionamiento conectables . También se ocupa de componentes de texto editables y no editables. - Sonido: interfaces y clases para leer, escribir, secuenciar y sintetizar datos de sonido.
- Texto:
java.text
trata con texto, fechas, números y mensajes. - Paquete de imágenes:
java.awt.image
y javax.imageio
proporciona API para escribir, leer y modificar imágenes. - XML : SAX , DOM , StAX , transformaciones XSLT , XPath y varias API para servicios web , como el protocolo SOAP y JAX-WS .
- La seguridad es proporcionada por
java.security
y los servicios de cifrado son proporcionados por javax.crypto
. - Bases de datos : acceso a bases de datos SQL a través de
java.sql
- Acceso a motores de scripts: el
javax.script
paquete proporciona acceso a cualquier lenguaje de scripts compatible . - Applets :
java.applet
permite descargar aplicaciones a través de una red y ejecutarlas dentro de un entorno protegido. - Java Beans :
java.beans
proporciona formas de manipular componentes reutilizables. - Introspección y reflexión: java.lang.Class representa una clase, pero otras clases como Método y Constructor están disponibles en
java.lang.reflect
.
Licencias
Licencias previas
Antes del lanzamiento de OpenJDK, el JDK se basaba en una licencia propietaria .
Tras su promesa de lanzar un JDK totalmente compilable basado en código casi completamente libre y de código abierto en la primera mitad de 2007, [3] Sun lanzó el código fuente completo de la Biblioteca de clases bajo la GPL el 8 de mayo de 2007, excepto algunas partes limitadas que fueron licenciadas por Sun de terceros que no querían que su código se publicara bajo una licencia de código abierto. [4] El objetivo de Sun era reemplazar las partes que siguen siendo propietarias y de código cerrado con implementaciones alternativas y hacer que la Biblioteca de clases sea completamente libre y de código abierto.
Hasta diciembre de 2010, la parte restante del JDK estaba disponible a través de Sun y luego de Oracle como complementos binarios [5] que eran necesarios para construir el JDK pero no para ejecutarlo. A partir de mayo de 2007 [actualizar], la única parte de la biblioteca de clases que seguía siendo propietaria y de código cerrado (4% a partir de mayo de 2007 [actualizar]para OpenJDK 7, [6] y menos del 1% a partir de mayo de 2008 [actualizar]y OpenJDK 6 [7] [8] ) era [9] la implementación de SNMP . [10]
Desde el primer lanzamiento en mayo de 2007, Sun, con la ayuda de la comunidad, publicó como código abierto o reemplazó con alternativas de código abierto casi todo el código obstaculizado:
- Todo el código del motor de audio, incluido el sintetizador de software , se convirtió en código abierto. [10] [11] El sintetizador de software de código cerrado ha sido reemplazado por un nuevo sintetizador desarrollado específicamente para OpenJDK llamado Gervill , [12]
- Todas las clases de criptografía se publicaron como código abierto, [13]
- El código que escala y rasteriza las fuentes utiliza FreeType de código abierto [14] [15] [16]
- La gestión de color nativa utiliza LittleCMS de código abierto . [15] Hay una capa conectable en el JDK, de modo que la versión comercial de Java puede utilizar el sistema de gestión de color propietario original y OpenJDK puede utilizar LittleCMS.
- El código rasterizador de gráficos anti-aliasing utiliza el renderizador de código abierto Pisces utilizado en el proyecto phoneME . [15] [17] [18]
- El complemento de JavaScript es de código abierto (el motor de JavaScript en sí fue de código abierto desde el principio). [19]
Versión de código abierto
A partir de diciembre de 2010, todos los llamados complementos binarios fueron reemplazados por reemplazos de código abierto , lo que hizo que todo el JDK fuera abierto. [20]
Implementaciones alternativas
GNU Classpath es la otra biblioteca de clases de software libre principal para Java. A diferencia de otras implementaciones, solo implementa la biblioteca de clases y la utilizan muchos entornos de ejecución de Java gratuitos (como Kaffe , SableVM y JamVM ).
Apache Harmony era otra biblioteca de clases de software libre. Su objetivo era implementar las otras partes de la pila Java ( máquina virtual , compilador y otras herramientas necesarias para cualquier implementación de Java ).
Véase también
Referencias
- ^ "Cómo se encuentran las clases". Oracle Corporation . Archivado desde el original el 25 de abril de 2009. Consultado el 5 de diciembre de 2015 .
- ^ "Resumen del módulo JDK". Oracle Corporation . 23 de octubre de 2015. Archivado desde el original el 8 de diciembre de 2015. Consultado el 29 de noviembre de 2015 .
- ^ "Java libre y de código abierto: preguntas frecuentes". sun.com . Mayo de 2007. Archivado desde el original el 22 de mayo de 2007 . Consultado el 27 de junio de 2024 .
- ^ Rich Green (8 de mayo de 2007). "¡Open JDK ya está aquí!". Sun Microsystems . Archivado desde el original el 7 de febrero de 2012. Consultado el 25 de noviembre de 2011 .
- ^ "Complementos binarios de OpenJDK". Sun Microsystems . 8 de mayo de 2007. Archivado desde el original el 26 de agosto de 2012. Consultado el 25 de noviembre de 2011 .
- ^ Fitzsimmons, Thomas (18 de mayo de 2007). "Planes para OpenJDK" . Consultado el 22 de mayo de 2007 .
- ^ Angel, Lillian (13 de marzo de 2008). «OpenJDK reemplazará a IcedTea en Fedora 9». Archivado desde el original el 10 de diciembre de 2012. Consultado el 5 de abril de 2008 .
- ^ Wade, Karsten (13 de marzo de 2008). "OpenJDK en Fedora 9!". redhatmagazine.com. Archivado desde el original el 21 de abril de 2008. Consultado el 5 de abril de 2008.
Thomas Fitzsimmons actualizó las páginas de origen de las notas de la versión de Fedora 9 para reflejar que Fedora 9 se distribuiría con OpenJDK 6 en lugar de la implementación de IcedTea de OpenJDK 7. Fedora 9 (Sulphur) se lanzará en mayo de 2008.
- ^ Herron, David (4 de octubre de 2007). "Planes para OpenJDK". Archivado desde el original el 11 de octubre de 2007. Consultado el 9 de octubre de 2007 .
- ^ ab "OpenJDK 6 b10 source posted". 2008-05-30. Archivado desde el original el 2009-06-18 . Consultado el 2008-06-01 .
- ^ "Página del proyecto Audio-Engine". Archivado desde el original el 16 de mayo de 2007. Consultado el 19 de mayo de 2007 .
- ^ "Gervill – Sintetizador de software". Archivado desde el original el 4 de octubre de 2011. Consultado el 1 de junio de 2008 .
- ^ "Se ha añadido la criptografía a OpenJDK". 27 de septiembre de 2007. Archivado desde el original el 25 de diciembre de 2007. Consultado el 7 de octubre de 2007 .
- ^ "página del proyecto font-scaler". Archivado desde el original el 10 de junio de 2015. Consultado el 19 de mayo de 2007 .
- ^ abc "Página del proyecto Java2D". Archivado desde el original el 16 de mayo de 2007. Consultado el 19 de mayo de 2007 .
- ^ "Rasterizador de fuentes Freetype". 7 de agosto de 2007. Archivado desde el original el 7 de enero de 2009. Consultado el 24 de noviembre de 2007 .
- ^ "Bienvenido al proyecto PhoneME". Archivado desde phoneme.dev.java.net/ el original el 10 de junio de 2007.
- ^ "página del proyecto graphics-rasterizer". Archivado desde el original el 16 de mayo de 2007. Consultado el 19 de mayo de 2007 .
- ^ "Javascript está sobrecargado y no hay compatibilidad con complementos de JavaScript". IcedTea . 2008-03-11. Archivado desde el original el 2008-09-27 . Consultado el 2008-06-01 .
Resumen de cambios. JavaScript ya no está sobrecargado, pero aún necesitamos compatibilidad con LiveConnect.
- ^ Kelly O'Hair (diciembre de 2010). "Se eliminó la lógica de los complementos binarios de OpenJDK7 y OpenJDK6". Oracle Corporation . Archivado desde el original el 7 de abril de 2022. Consultado el 25 de noviembre de 2011 .
Enlaces externos
- Página principal de Java SE
- Javadocs de la API de Java SE 19
- Documentación de la API de Java SE
- Kits de desarrollo de software Java (estado a agosto de 2006 [actualizar]):
- 1.7 (desarrollo temprano)
- 1.6 (estable, actual)
- 1.5 (estable)
- 1.4 (estable)
- 1.3 (obsoleto)