La Biblioteca de Clases de Java ( JCL ) es un conjunto de bibliotecas de carga dinámica que los lenguajes de la Máquina Virtual de Java (JVM) pueden llamar en tiempo de ejecución . Es la biblioteca estándar de Java y otros lenguajes de la JVM, y por lo tanto a veces se la llama Biblioteca Estándar de Java . [ 1 ] 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. Desde Java 9, se puede acceder a la Biblioteca de Clases de Java a través de la ruta del módulo utilizando el Sistema de Módulos de la Plataforma Java .
JCL cumple tres funciones dentro de la JVM:
- Al igual que otras bibliotecas de código estándar , proporcionan al programador un conjunto bien 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 el acceso a archivos .
- Es posible que algunas plataformas subyacentes no admitan todas las funcionalidades que requiere una aplicación Java. En estos casos, la implementación de la biblioteca puede emular dichas funcionalidades o proporcionar una forma consistente de comprobar la presencia de una funcionalidad específica.
Utiliza los espacios de nombres java.*, javax.*y jdk.*. Algunas clases empaquetadas pueden residir en espacios de nombres como sun.*o com.sun.*(para Sun Microsystems ), pero no se consideran parte de la biblioteca estándar. El javaxespacio de nombres se asoció principalmente con Java Platform, Enterprise Edition como paquetes de extensión de la biblioteca estándar de Java.
Implementación y configuración
JCL está escrito casi en su totalidad en Java, excepto las partes que necesitan acceso directo al hardware y al sistema operativo (como para E/S o gráficos de mapa de bits ), que en cambio están escritas en C++ . [ 2 ] Las clases que dan acceso a estas funciones suelen usar envoltorios de Java Native Interface para acceder a las API del sistema operativo .
Casi todo el JCL se almacena en un único archivo Java llamado " rt.jar ", que se incluye en las distribuciones de JRE y JDK . La biblioteca de clases Java ( rt.jar ) se encuentra en la ruta de clases de arranque predeterminada [ 3 ] y no es necesario que aparezca 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 de 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. [ 4 ]
Conformidad
Cualquier implementación de Java debe superar las pruebas del Kit de Compatibilidad Tecnológica de Java (JCL) para garantizar su conformidad.
Características principales
Las funcionalidades de JCL se acceden a través de las clases proporcionadas en los paquetes .
java.langContiene clases e interfaces fundamentales estrechamente vinculadas al lenguaje y al sistema de tiempo de ejecución .- El acceso a E/S y a la red se realiza a través del sistema de archivos de la plataforma y, de forma más general, a través de las redes mediante los paquetes y . Para la red, SCTP está disponible a través de .
java.iojava.niojava.netcom.sun.nio.sctp - Paquete de matemáticas :
java.mathproporciona expresiones y evaluación matemáticas, así como tipos de datos numéricos enteros y decimales de precisión arbitraria. - Colecciones y utilidades : estructuras de datos de colección integradas y clases de utilidad para expresiones regulares , concurrencia , registro y compresión de datos .
- GUI y gráficos 2D : el paquete AWT
java.awt( ) ofrece operaciones básicas de GUI y se enlaza con el sistema nativo subyacente. También incluye la API de gráficos 2D. El paquete Swing ( ) se basa en AWT y proporciona un conjunto de herramientas de widgetsjavax.swingindependiente de la plataforma , así como una apariencia personalizable . Además, gestiona componentes de texto editables y no editables. - Sonido: interfaces y clases para la lectura, escritura, secuenciación y síntesis de datos de sonido.
- Texto:
java.textse ocupa de textos, fechas, números y mensajes. - Paquete de imágenes:
java.awt.imageproporcionajavax.imageioAPI 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 la proporciona
java.securityy los servicios de cifrado los proporcionajavax.crypto. - Bases de datos : acceso a bases de datos SQL a través de
java.sql - Acceso a motores de scripting: El
javax.scriptpaquete proporciona acceso a cualquier lenguaje de scripting compatible . - Applets :
java.appletpermite descargar aplicaciones a través de una red y ejecutarlas dentro de un entorno aislado protegido. - Java Beans :
java.beansproporciona formas de manipular componentes reutilizables. - Introspección y reflexión:
java.lang.Classrepresenta una clase, pero otras clases como Método y Constructor están disponibles enjava.lang.reflect.
Paquetes fuera del espacio de nombres principal
Java agrupa algunos paquetes fuera de los espacios de nombres principales ( java.*, javax.*, y jdk.*). Entre ellos se incluyen:
com.sun.*: algunos paquetes internos desarrollados originalmente por Sun Microsystems , para HotSpot VM, árbol de sintaxis abstracta , interfaz de depuración de Java y servidores HTTP.netscape.javascript.*: clases para acceder al motor JavaScript y al DOM HTML en el navegador web. Obsoleto en Java 24, para una eventual migración a JavaFX . [ 5 ]org.ietf.jgss.*: API genérica de servicio de seguridad según lo especificado por el Grupo de Trabajo de Ingeniería de Internet . [ 6 ]org.omg.*: Paquetes del Grupo de Gestión de Objetos , como las características de la Arquitectura de Agente de Solicitudes de Objetos Comunes (CORBA). Obsoleto desde Java 9, eliminado desde Java 11. [ 7 ]org.w3c.dom.*: Paquetes del Modelo de Objetos de Documento según lo especificado por el Consorcio World Wide Web . [ 8 ]org.xml.sax.*: API simple para paquetes XML relacionados con XML . [ 9 ]
Paquetes de implementación
El sun.*(que contiene la sun.misc.Unsafeclase, utilizada para manipular la CPU y el hardware, administrar directamente la memoria y otras cosas) [ 10 ] [ 11 ] y otros com.sun.*paquetes son todos parte de un módulo llamado jdk.unsupported. [ 12 ] Este módulo contiene paquetes que no son parte de la biblioteca estándar de Java pero que se incluyen como parte de la implementación de Java.
Licencias
Licencias anteriores
Antes del lanzamiento de OpenJDK, el JDK se basaba en una licencia propietaria .
Siguiendo su promesa de lanzar un JDK completamente compilable basado en código casi totalmente libre y de código abierto en la primera mitad de 2007, [ 13 ] 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 Sun había licenciado de terceros que no querían que su código se publicara bajo una licencia de código abierto. [ 14 ] El objetivo de Sun era reemplazar las partes que seguían siendo propietarias y de código cerrado con implementaciones alternativas y hacer que la Biblioteca de Clases fuera completamente libre y de código abierto.
Hasta diciembre de 2010, la parte restante del JDK que estaba restringida fue puesta a disposición por Sun y luego por Oracle como Binary Plugs [ 15 ] , que eran necesarios para compilar el JDK pero no para ejecutarlo. A partir de mayo de 2007 , la única parte de la biblioteca Class que permaneció propietaria y de código cerrado (4% a mayo de 2007) para OpenJDK 7, [ 16 ] y menos del 1% a partir de mayo de 2008 y OpenJDK 6 [ 17 ] [ 18 ] ) fue [ 19 ] la implementación de SNMP . [ 20 ]
Desde su primer lanzamiento en mayo de 2007, Sun, con la ayuda de la comunidad, ha liberado como código abierto o ha sustituido por alternativas de código abierto casi todo el código restringido:
- Todo el código del motor de audio, incluido el sintetizador de software , se convirtió en código abierto. [ 20 ] [ 21 ] El sintetizador de software de código cerrado ha sido reemplazado por un nuevo sintetizador desarrollado específicamente para OpenJDK llamado Gervill . [ 22 ]
- Todas las clases de criptografía se publicaron como código abierto. [ 23 ]
- El código que escala y rasteriza las fuentes utiliza FreeType de código abierto . [ 24 ] [ 25 ] [ 26 ]
- La gestión de color nativa utiliza LittleCMS de código abierto . [ 25 ] Hay una capa conectable en el JDK, de modo que la versión comercial de Java puede usar el sistema de gestión de color propietario original y OpenJDK puede usar LittleCMS.
- El código del rasterizador de gráficos con suavizado de bordes utiliza el renderizador de código abierto Pisces utilizado en el proyecto phoneME . [ 25 ] [ 27 ] [ 28 ]
- El complemento de JavaScript es de código abierto (el motor de JavaScript en sí fue de código abierto desde el principio). [ 29 ]
Lanzamiento de código abierto
A partir de diciembre de 2010, todos los llamados complementos binarios fueron reemplazados por alternativas de código abierto , lo que hizo que todo el JDK fuera de código abierto. [ 30 ]
Implementaciones alternativas
GNU Classpath es la otra principal biblioteca de clases de software libre para Java. A diferencia de otras implementaciones, solo implementa la biblioteca de clases y es utilizada por muchos entornos de ejecución de Java libres (como Kaffe , SableVM y JamVM ).
Apache Harmony era otra biblioteca de clases de software libre. Su objetivo era implementar las demás partes de la pila de Java ( máquina virtual , compilador y otras herramientas necesarias para cualquier implementación de Java ).
Véase también
Referencias
- ↑ Huisman, M.; Jacobs, BPF; van den Berg, J. (1999). "Un estudio de caso en la verificación de bibliotecas de clases: la clase vector de Java" . FernUniversität : 40. Recuperado el 6 de octubre de 2025 .
- ↑ "Basado en las fuentes de OpenJDK" . OpenJDK . Consultado el 23 de octubre de 2021 .
- ↑ "Cómo se encuentran las clases" . Oracle Corporation . Archivado del 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 del original el 8 de diciembre de 2015. Consultado el 29 de noviembre de 2015 .
- ↑ "netspace.javascript (Java SE 25 y JDK 25)" . docs.oracle.com . Oracle Corporation . Consultado el 10 de octubre de 2025 .
- ↑ "org.ietf.jgss (Java SE 25 y JDK 25)" . docs.oracle.com . Oracle Corporation . Consultado el 10 de octubre de 2025 .
- ↑ "java.corba (Java SE 10 y JDK 10)" . docs.oracle.com . Oracle Corporation . Consultado el 10 de octubre de 2025 .
- ↑ "org.w3c.dom (Java SE 25 y JDK 25)" . docs.oracle.com . Oracle Corporation . Consultado el 10 de octubre de 2025 .
- ↑ "org.xml.sax (Java SE 25 y JDK 25)" . docs.oracle.com . Oracle Corporation . Consultado el 10 de octubre de 2025 .
- ↑ Ben Evans (4 de mayo de 2020). "La clase insegura: inseguro a cualquier velocidad" . blogs.oracle.com . Oracle Corporation.
- ↑ Oracle Corporation. "Preguntas frecuentes: Paquetes Sun: Por qué los desarrolladores no deberían escribir programas que llamen a paquetes 'sun'" . oracle.com . Oracle Corporation . Consultado el 22 de abril de 2026 .
- ↑ "jdk.unsupported" . cr.openjdk.org . OpenJDK . Consultado el 10 de octubre de 2025 .
- ↑ "Java libre y de código abierto - Preguntas frecuentes" . sun.com . Mayo de 2007. Archivado del 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 del original el 7 de febrero de 2012. Consultado el 25 de noviembre de 2011 .
- ↑ "OpenJDK Binary Plugs" . Sun Microsystems . 8 de mayo de 2007. Archivado del original el 26 de agosto de 2012. Consultado el 25 de noviembre de 2011 .
- ↑ Fitzsimmons, Thomas (18 de mayo de 2007). "Planes para OpenJDK" . Recuperado el 22 de mayo de 2007 .
- ↑ Angel, Lillian (13 de marzo de 2008). "OpenJDK reemplazará a IcedTea en Fedora 9" . Recuperado el 5 de abril de 2008 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ Wade, Karsten (13 de marzo de 2008). "¡OpenJDK en Fedora 9!" . redhatmagazine.com. Archivado del original el 21 de abril de 2008. Recuperado 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 IcedTea de OpenJDK 7. Fedora 9 (Sulphur) se lanzará en mayo de 2008.
- ↑ Herron, David (04-10-2007). "Planes para OpenJDK" . Archivado del original el 11-10-2007 . Recuperado el 09-10-2007 .
- 1 2 "Fuente de OpenJDK 6 b10 publicada" . 30-05-2008. Archivado del original el 18-06-2009 . Recuperado el 01-06-2008 .
- ↑ "Página del proyecto audio-engine" . Archivado del original el 16 de mayo de 2007. Consultado el 19 de mayo de 2007 .
- ↑ "Gervill – Sintetizador de software" . Consultado el 1 de junio de 2008 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ "Se ha añadido criptografía a OpenJDK" . 27/09/2007. Archivado del original el 25/12/2007 . Consultado el 07/10/2007 .
- ↑ "font-scaler projectpage" . Archivado del original el 10 de junio de 2015. Consultado el 19 de mayo de 2007 .
- 1 2 3 "Página del proyecto Java2D" . Archivado del original el 16 de mayo de 2007. Recuperado el 19 de mayo de 2007 .
- ↑ "Rasterizador de fuentes Freetype" . 7 de agosto de 2007. Archivado del 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.
{{cite web}}: Comprobar|url=valor ( ayuda ) - ↑ "Página del proyecto graphics-rasterizer" . Archivado del original el 16 de mayo de 2007. Consultado el 19 de mayo de 2007 .
- ↑ "Javascript está sobrecargado y no hay soporte para complementos de JavaScript" . IcedTea . 11 de marzo de 2008. Archivado del original el 27 de septiembre de 2008. Consultado el 1 de junio de 2008. Resumen cambiante .
JavaScript ya no está sobrecargado, pero aún necesitamos soporte para LiveConnect.
- ↑ Kelly O'Hair (diciembre de 2010). "Se eliminó la lógica de los complementos binarios de OpenJDK7 y OpenJDK6" . Oracle Corporation . Archivado del 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 24
- Documentación de la API de Java SE
- Kits de desarrollo de software Java (estado a agosto de 2006)):
- 1.7 (desarrollo temprano)
- 1,6 (estable, actual)
- 1,5 (estable)
- 1.4 (estable)
- 1.3 (obsoleto)
- Java (lenguaje de programación)
- Bibliotecas de Java (lenguaje de programación)