The Java Class Library (JCL) is a set of dynamically loadable libraries that Java Virtual Machine (JVM) languages can call at run time. Because the Java Platform is not dependent on a specific operating system, applications cannot rely on any of the platform-native libraries. Instead, the Java Platform provides a comprehensive set of standard class libraries, containing the functions common to modern operating systems.
JCL serves three purposes within the JVM:
- Like other standard code libraries, they provide the programmer a well-known set of useful facilities, such as container classes and regular expression processing.
- The library provides an abstract interface to tasks that would normally depend heavily on the hardware and operating system, such as network access and file access.
- Some underlying platforms may not support all of the features a Java application expects. In these cases, the library implementation can either emulate those features or provide a consistent way to check for the presence of a specific feature.
Implementation and configuration
JCL is almost entirely written in Java, except for the parts that need direct access to the hardware and operating system (such as for I/O or bitmap graphics). The classes that give access to these functions commonly use Java Native Interface wrappers to access operating system APIs.
Almost all of JCL is stored in a single Java archive file called "rt.jar" which is provided with JRE and JDK distributions. The Java Class Library (rt.jar) is located in the default bootstrap classpath[1] and does not have to appear in the classpath declared for the application. The runtime uses the bootstrap class loader to find the JCL.
The Java Module System (part of the Java 9 release) broke the monolithic "rt.jar" JAR file and modularized the JCL itself in several modules with specified dependencies.[2]
Conformance
Any Java implementation must pass the Java Technology Compatibility Kit tests for compliance, which includes JCL tests.
Main features
JCL Features are accessed through classes provided in packages.
java.lang
Contiene clases e interfaces fundamentales estrechamente vinculadas al lenguaje y al sistema de ejecución .- Las E/S y las redes acceden al sistema de archivos de la plataforma y, de manera más general , a las redes a través de los paquetes y . Para redes, SCTP está disponible a través de .
java.io
java.nio
java.net
com.sun.nio.sctp
- Paquete de matemáticas :
java.math
proporciona expresiones y evaluaciones matemáticas, 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 utilidades para expresiones regulares , concurrencia , registro y compresión de datos .
- GUI y gráficos 2D : el paquete AWT
java.awt
( ) operaciones básicas de GUI y se vincula al sistema nativo subyacente. También contiene la API de gráficos 2D. El paquete Swingjavax.swing
( ) está construido sobre AWT y proporciona un kit de herramientas de widgets independiente de la plataforma , así como una apariencia conectable . También se ocupa de componentes de texto editables y no editables. - Sonido: interfaces y clases para lectura, escritura, secuenciación y síntesis de datos sonoros.
- Texto:
java.text
se ocupa de 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 diversas API para servicios Web , como 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 secuencias de comandos: el
javax.script
paquete brinda acceso a cualquier lenguaje de secuencias de comandos compatible . - Applets :
java.applet
permite descargar aplicaciones a través de una red y ejecutarlas dentro de un entorno limitado 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 Method y Constructor están disponibles en formato
java.lang.reflect
.
Licencia
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 fuente abierto y casi completamente gratuito en la primera mitad de 2007, [3] Sun publicó el código fuente completo de la biblioteca de clases bajo GPL el 8 de mayo de 2007, excepto algunos piezas limitadas que Sun contaba con licencia 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 gratuita y de código abierto.
Hasta diciembre de 2010, Sun puso a disposición la parte restante gravada del JDK y luego Oracle como Binary Plugs [5] que eran necesarios para construir el JDK pero no necesarios para ejecutarlo. en mayo de 2007 , la única parte de la biblioteca Class que seguía siendo propietaria y de código cerrado (4% en mayo de 2007 para OpenJDK 7, [6] y menos del 1% en mayo de 2008 y OpenJDK 6 [7] [8 ] ) fue [9] la implementación de SNMP . [10][actualizar][actualizar][actualizar]
Desde la primera versión de mayo de 2007, Sun, con la ayuda de la comunidad, lanzó como código abierto o reemplazó con alternativas de código abierto casi todo el código gravado:
- Todo el código del motor de audio, incluido el sintetizador de software , pasó a ser de 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 usar el sistema de gestión de color original y propietario y OpenJDK puede usar LittleCMS.
- El código rasterizador de gráficos anti-aliasing utiliza el renderizador Piscis de código abierto 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]
Lanzamiento 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 principal de software libre para Java. A diferencia de otras implementaciones, solo implementa la biblioteca de clases y es utilizada por muchos tiempos de ejecución de Java gratuitos (como Kaffe , SableVM , JamVM ).
Apache Harmony era otra biblioteca de software libre. Su objetivo era implementar las otras partes de la pila de Java ( máquina virtual , compilador y otras herramientas necesarias para cualquier implementación de Java ).
Ver también
Referencias
- ^ "Cómo se encuentran las clases". Corporación Oráculo . Consultado el 5 de diciembre de 2015 .
- ^ "Resumen del módulo JDK". Corporación Oráculo . 2015-10-23. Archivado desde el original el 8 de diciembre de 2015 . Consultado el 29 de noviembre de 2015 .
- ^ http://www.sun.com/software/opensource/java/faq.jsp#b4
- ^ Verde rico (8 de mayo de 2007). "¡Open JDK ya está aquí!". Microsistemas solares . Consultado el 25 de noviembre de 2011 .
- ^ "Conexiones binarias OpenJDK". Microsistemas solares . 2007-05-08. 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 .
- ^ Ángel, Lillian (13 de marzo de 2008). "OpenJDK para reemplazar 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 fuente de las notas de la versión de Fedora 9 para reflejar que Fedora 9 se enviarí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 (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 "Se publicó la fuente de OpenJDK 6 b10". 2008-05-30 . Consultado el 1 de junio de 2008 .
- ^ página del proyecto del motor de audio
- ^ "Gervill - Sintetizador de software". Archivado desde el original el 4 de octubre de 2011 . Consultado el 1 de junio de 2008 .
- ^ "Se ha agregado Crypto a OpenJDK". 2007-09-27 . Consultado el 7 de octubre de 2007 .
- ^ página del proyecto de escalador de fuentes
- ^ página del proyecto abc Java2D
- ^ "Rasterizador de fuentes Freetype". 2007-08-07 . Consultado el 24 de noviembre de 2007 .
- ^ phoneme.dev.java.net/ Archivado el 10 de junio de 2007 en Wayback Machine.
- ^ página del proyecto de rasterizador de gráficos
- ^ "Javascript está sobrecargado y no hay soporte para complementos de JavaScript". Te helado . 2008-03-11. Archivado desde el 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 de LiveConnect.
- ^ Kelly O'Hair (diciembre de 2010). "Se eliminó la lógica de complementos binarios OpenJDK7 y OpenJDK6". Corporación Oráculo . 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 en agosto de 2006 [actualizar]):
- 1.7 (desarrollo temprano)
- 1.6 (estable, actual)
- 1,5 (estable)
- 1.4 (estable)
- 1.3 (obsoleto)