Java Platform, Standard Edition ( Java SE ) es una plataforma informática para el desarrollo y la implementación de código portátil para entornos de escritorio y servidor . [1] Java SE se conocía anteriormente como Java 2 Platform, Standard Edition ( J2SE ).
La plataforma utiliza el lenguaje de programación Java y es parte de la familia de plataformas de software Java . Java SE define una gama de API de uso general , como las API de Java para la biblioteca de clases de Java, y también incluye la especificación del lenguaje Java y la especificación de la máquina virtual Java . [2] OpenJDK es la implementación de referencia oficial desde la versión 7. [3] [4] [5]
Nomenclatura, normas y especificaciones
La plataforma se conocía como Java 2 Platform, Standard Edition o J2SE desde la versión 1.2, hasta que el nombre se cambió a Java Platform, Standard Edition o Java SE en la versión 1.5. El "SE" se utiliza para distinguir la plataforma base de las plataformas Enterprise Edition ( Java EE ) y Micro Edition ( Java ME ). El "2" originalmente tenía la intención de enfatizar los principales cambios introducidos en la versión 1.2, pero se eliminó en la versión 1.6. La convención de nomenclatura se ha cambiado varias veces a lo largo del historial de versiones de Java . A partir de J2SE 1.4 (Merlin), Java SE se ha desarrollado bajo el Proceso de la comunidad de Java , que produce descripciones de las especificaciones propuestas y finales para la plataforma Java denominada Solicitudes de especificación de Java (JSR) . [6] JSR 59 fue la especificación general para J2SE 1.4 y JSR 176 especificó J2SE 5.0 (Tiger). Java SE 6 (Mustang) se lanzó bajo JSR 270.
Java Platform, Enterprise Edition (Java EE) es una especificación relacionada que incluye todas las clases en Java SE, más un número que es más útil para los programas que se ejecutan en servidores en lugar de estaciones de trabajo .
Java Platform, Micro Edition (Java ME) es una especificación relacionada destinada a proporcionar una colección certificada de API de Java para el desarrollo de software para dispositivos pequeños con recursos limitados, como teléfonos móviles , PDA y decodificadores .
El entorno de ejecución de Java (JRE) y Java Development Kit (JDK) son los archivos reales descargado e instalado en un ordenador para ejecutar o desarrollar programas Java, respectivamente.
Paquetes de uso general
java.lang
El paquete Java java.lang
contiene clases e interfaces fundamentales estrechamente vinculadas al lenguaje y al sistema de tiempo de ejecución . Esto incluye las clases raíz que forman la jerarquía de clases , tipos vinculados a la definición del lenguaje, excepciones básicas , funciones matemáticas, subprocesos , funciones de seguridad, así como alguna información sobre el sistema nativo subyacente. Este paquete contiene 22 de las 32 Error
clases proporcionadas en JDK 6.
Las principales clases e interfaces en java.lang
son:
Object
- la clase que es la raíz de cada jerarquía de clases.Enum
- la clase base para las clases de enumeración (a partir de J2SE 5.0).Class
- la clase que es la raíz del sistema de reflexión de Java .Throwable
- la clase que es la clase base de la jerarquía de clases de excepción.Error
,Exception
yRuntimeException
- las clases base para cada tipo de excepción.Thread
- la clase que permite operaciones en subprocesos.String
- la clase para cadenas y literales de cadena .StringBuffer
yStringBuilder
- clases para realizar manipulación de cadenas (aStringBuilder
partir de J2SE 5.0).Comparable
- la interfaz que permite la comparación genérica y la ordenación de objetos (a partir de J2SE 1.2).Iterable
- la interfaz que permite la iteración genérica utilizando el bucle mejoradofor (a partir de J2SE 5.0).ClassLoader
,Process
,Runtime
,SecurityManager
, YSystem
- clases que proporcionan "las operaciones del sistema" que manejan la carga dinámica de clases, creación de externos procesos , anfitrionas ambiente consultas tales como la hora del día, y la aplicación de políticas de seguridad .Math
yStrictMath
- clases que proporcionan funciones matemáticas básicas como seno , coseno y raíz cuadrada (aStrictMath
partir de J2SE 1.3).- Las clases contenedoras primitivas que encapsulan tipos primitivos como objetos .
- Las clases de excepción básicas lanzadas para el nivel de idioma y otras excepciones comunes.
Las clases de java.lang
se importan automáticamente a cada archivo fuente .
java.lang.ref
El java.lang.ref
paquete proporciona tipos de referencias más flexibles que los que están disponibles de otro modo, lo que permite una interacción limitada entre la aplicación y el recolector de basura Java Virtual Machine (JVM) . Es un paquete importante, lo suficientemente central para el lenguaje como para que los diseñadores del lenguaje le den un nombre que comience con "java.lang", pero es algo especial y no lo usan muchos desarrolladores. Este paquete se agregó en J2SE 1.2.
Java tiene un sistema expresivo de referencias y permite un comportamiento especial para la recolección de basura. Una referencia normal en Java se conoce como "referencia fuerte". El java.lang.ref
paquete define otros tres tipos de referencias: referencias suaves, débiles y fantasmas. Cada tipo de referencia está diseñado para un uso específico.
- Se
SoftReference
puede usar para implementar una caché . Un objeto al que no se puede acceder mediante una referencia fuerte (es decir, que no se puede alcanzar fuertemente), pero al que se hace referencia mediante una referencia flexible, se denomina "accesible suavemente". Un objeto fácilmente accesible puede ser recolectado como basura a discreción del recolector de basura. Esto generalmente significa que los objetos de fácil acceso solo se recolectan como basura cuando la memoria libre es baja, pero nuevamente, esto queda a discreción del recolector de basura. Semánticamente, una referencia suave significa: "Conserve este objeto cuando nada más haga referencia a él, a menos que se necesite la memoria". - A
WeakReference
se utiliza para implementar mapas débiles. Un objeto que no es alcanzable fuerte o suavemente, pero es referenciado por una referencia débil se llama " débilmente alcanzable ". Un objeto de difícil acceso es la basura recolectada en el siguiente ciclo de recolección. Este comportamiento se usa en la clasejava.util.WeakHashMap
. Un mapa débil permite al programador colocar pares clave / valor en el mapa y no preocuparse por los objetos que ocupan memoria cuando la clave ya no está disponible en ningún otro lugar. Otra posible aplicación de referencias débiles es el grupo de internos de cadenas . Semánticamente, una referencia débil significa "deshacerse de este objeto cuando nada más haga referencia a él en la siguiente recolección de basura". - A
PhantomReference
se utiliza para hacer referencia a objetos que se han marcado para la recolección de elementos no utilizados y que se han finalizado , pero que aún no se han recuperado. Un objeto que no es alcanzable fuerte, suave o débilmente, pero que es referenciado por una referencia fantasma se llama "alcanzable fantasma". Esto permite una limpieza más flexible de lo que es posible con el mecanismo de finalización solo. Semánticamente, una referencia fantasma significa "este objeto ya no es necesario y ha sido finalizado en preparación para ser recolectado".
Cada uno de estos tipos de referencia amplía la Reference
clase, que proporciona el get()
método para devolver una referencia fuerte al objeto de referencia (o null
si la referencia se ha borrado o si el tipo de referencia es fantasma) y el clear()
método para borrar la referencia.
El java.lang.ref
también define la clase ReferenceQueue
, que se puede utilizar en cada una de las aplicaciones discutidas anteriormente para realizar un seguimiento de los objetos que han cambiado el tipo de referencia. Cuando Reference
se crea un, se registra opcionalmente con una cola de referencia. La aplicación sondea la cola de referencias para obtener referencias que han cambiado el estado de accesibilidad.
java.lang.reflect
La reflexión es un componente de la API de Java que permite que el código Java examine y "refleje" los componentes de Java en tiempo de ejecución y utilice los miembros reflejados. Las clases en el java.lang.reflect
paquete, junto con java.lang.Class
y java.lang.Package
acomodar aplicaciones como depuradores , intérpretes , inspectores de objetos, los navegadores de clase , y servicios como objeto serialización y JavaBeans que necesitan tener acceso a cualquiera de los miembros públicos de un objeto de destino (en función de su clase en tiempo de ejecución) o los miembros declarados por una clase determinada. Este paquete se agregó en JDK 1.1.
La reflexión se usa para instanciar clases e invocar métodos usando sus nombres, un concepto que permite la programación dinámica. Las clases, interfaces, métodos, campos y constructores se pueden descubrir y utilizar en tiempo de ejecución. La reflexión es compatible con los metadatos que la JVM tiene sobre el programa.
Técnicas
Hay técnicas básicas involucradas en la reflexión:
- Descubrimiento: esto implica tomar un objeto o clase y descubrir los miembros, superclases, interfaces implementadas y luego posiblemente usar los elementos descubiertos.
- Usar por nombre: implica comenzar con el nombre simbólico de un elemento y usar el elemento nombrado.
Descubrimiento
El descubrimiento normalmente comienza con un objeto y llama al Object.getClass()
método para obtener el Class
. El Class
objeto tiene varios métodos para descubrir el contenido de la clase, por ejemplo:
getMethods()
- devuelve una matriz deMethod
objetos que representan todos los métodos públicos de la clase o interfazgetConstructors()
- devuelve una matriz deConstructor
objetos que representan todos los constructores públicos de la clasegetFields()
- devuelve una matriz deField
objetos que representan todos los campos públicos de la clase o interfazgetClasses()
- devuelve una matriz deClass
objetos que representan todas las clases e interfaces públicas que son miembros (por ejemplo, clases internas ) de la clase o interfazgetSuperclass()
- devuelve elClass
objeto que representa la superclase de la clase o interfaz (null
se devuelve para interfaces)getInterfaces()
- devuelve una matriz deClass
objetos que representan todas las interfaces implementadas por la clase o interfaz
Usar por nombre
El Class
objeto se puede obtener ya sea a través del descubrimiento, utilizando el literal clase (por ejemplo MyClass.class
) o utilizando el nombre de la clase (por ejemplo Class.forName("mypackage.MyClass")
). Con un Class
objeto, miembro Method
, Constructor
u Field
objetos se pueden obtener utilizando el nombre simbólico del miembro. Por ejemplo:
getMethod("methodName", Class...)
- devuelve elMethod
objeto que representa el método público con el nombre "methodName" de la clase o interfaz que acepta los parámetros especificados por losClass...
parámetros.getConstructor(Class...)
- devuelve elConstructor
objeto que representa al constructor público de la clase que acepta los parámetros especificados por losClass...
parámetros.getField("fieldName")
- devuelve elField
objeto que representa el campo público con el nombre "fieldName" de la clase o interfaz.
Method
, Constructor
Y Field
los objetos pueden ser utilizados para acceder dinámicamente el miembro representado de la clase. Por ejemplo:
Field.get(Object)
- devuelve un queObject
contiene el valor del campo de la instancia del objeto pasadoget()
. (Si elField
objeto representa un campo estático, elObject
parámetro se ignora y puede serlonull
).Method.invoke(Object, Object...)
- devuelve un queObject
contiene el resultado de invocar el método para la instancia del primerObject
parámetro pasadoinvoke()
. LosObject...
parámetros restantes se pasan al método. (Si elMethod
objeto representa un método estático, el primerObject
parámetro se ignora y puede serlonull
).Constructor.newInstance(Object...)
- devuelve la nuevaObject
instancia al invocar al constructor. LosObject...
parámetros se pasan al constructor. (Tenga en cuenta que el constructor sin parámetros de una clase también se puede invocar mediante una llamadanewInstance()
).
Matrices y proxies
El java.lang.reflect
paquete también proporciona una Array
clase que contiene métodos estáticos para crear y manipular objetos de matriz y, desde J2SE 1.3, una Proxy
clase que admite la creación dinámica de clases de proxy que implementan interfaces específicas.
La implementación de una Proxy
clase la proporciona un objeto proporcionado que implementa la InvocationHandler
interfaz. El InvocationHandler
's invoke(Object, Method, Object[])
método se llama para cada método invocado en el en el objeto de primer parámetro proxy es el objeto proxy, el segundo parámetro es el Method
objeto que representa el método de la interfaz implementada por el proxy, y el tercer parámetro es la matriz de parámetros pasados al método de interfaz. El invoke()
método devuelve un Object
resultado que contiene el resultado devuelto al código que llamó al método de interfaz de proxy.
java.io
El java.io
paquete contiene clases que admiten entrada y salida . Las clases del paquete están principalmente orientadas a la transmisión ; sin embargo, también se proporciona una clase para archivos de acceso aleatorio . Las clases centrales del paquete son y , que son clases base abstractas para leer y escribir en flujos de bytes , respectivamente. Las clases relacionadas y son clases base abstractas para leer y escribir en flujos de caracteres , respectivamente. El paquete también tiene algunas clases diversas para admitir interacciones con el sistema de archivos del host .InputStream
OutputStream
Reader
Writer
Corrientes
Las clases de flujo siguen el patrón del decorador al extender la subclase base para agregar características a las clases de flujo. Las subclases de las clases de flujo base normalmente reciben el nombre de uno de los siguientes atributos:
- el origen / destino de los datos del flujo
- el tipo de datos escritos en / leídos desde el flujo
- procesamiento o filtrado adicional realizado en los datos del flujo
Las subclases de transmisión se denominan utilizando la nomenclatura de patrón XxxStreamType
donde Xxx
es el nombre que describe la característica y StreamType
es uno de InputStream
, OutputStream
, Reader
, o Writer
.
La siguiente tabla muestra las fuentes / destinos admitidos directamente por el java.io
paquete:
Origen Destino | Nombre | Tipos de transmisión | En fuera | Clases |
---|---|---|---|---|
byte matriz ( byte[] ) | ByteArray | byte | En fuera | ByteArrayInputStream , ByteArrayOutputStream |
char matriz ( char[] ) | CharArray | char | En fuera | CharArrayReader , CharArrayWriter |
expediente | File | byte , char | En fuera | FileInputStream , FileOutputStream , FileReader ,FileWriter |
cadena ( StringBuffer ) | String | char | En fuera | StringReader , StringWriter |
hilo ( Thread ) | Piped | byte , char | En fuera | PipedInputStream , PipedOutputStream , PipedReader ,PipedWriter |
Otros paquetes de biblioteca estándar proporcionan implementaciones de flujo para otros destinos, como los InputStream
devueltos por el java.net.Socket.getInputStream()
método o la javax.servlet.ServletOutputStream
clase Java EE .
El manejo del tipo de datos y el procesamiento o filtrado de datos de flujo se logra a través de filtros de flujo . Todas las clases de filtro aceptan otro objeto de flujo compatible como parámetro para el constructor y decoran el flujo adjunto con características adicionales. Los filtros se crean mediante la extensión de una de las clases de filtros de base FilterInputStream
, FilterOutputStream
, FilterReader
, o FilterWriter
.
Las clases Reader
y Writer
son en realidad solo flujos de bytes con procesamiento adicional realizado en el flujo de datos para convertir los bytes en caracteres. Utilizan la codificación de caracteres predeterminada para la plataforma, que a partir de J2SE 5.0 está representada por la Charset
devuelta por el java.nio.charset.Charset.defaultCharset()
método estático. La InputStreamReader
clase convierte an en InputStream
a Reader
y la OutputStreamWriter
clase convierte an en OutputStream
a Writer
. Ambas clases tienen constructores que admiten la especificación de la codificación de caracteres que se utilizará. Si no se especifica ninguna codificación, el programa usa la codificación predeterminada para la plataforma.
La siguiente tabla muestra los otros procesos y filtros que el java.io
paquete admite directamente. Todas estas clases amplían la Filter
clase correspondiente .
Operación | Nombre | Tipos de transmisión | En fuera | Clases |
---|---|---|---|---|
búfer | Buffered | byte , char | En fuera | BufferedInputStream , BufferedOutputStream , BufferedReader ,BufferedWriter |
"retroceder" último valor leído | Pushback | byte , char | en | PushbackInputStream , PushbackReader |
tipos primitivos de lectura / escritura | Data | byte | En fuera | DataInputStream , DataOutputStream |
serialización de objetos (objetos de lectura / escritura) | Object | byte | En fuera | ObjectInputStream , ObjectOutputStream |
Acceso aleatorio
La RandomAccessFile
clase admite lectura y escritura de archivos de acceso aleatorio . La clase utiliza un puntero de archivo que representa un desplazamiento de bytes dentro del archivo para la siguiente operación de lectura o escritura. El puntero de archivo se mueve implícitamente leyendo o escribiendo y explícitamente llamando a los métodos seek(long)
o skipBytes(int)
. El getFilePointer()
método devuelve la posición actual del puntero del archivo .
Sistema de archivos
La File
clase representa una ruta de directorio o archivo en un sistema de archivos . Los objetos admiten la creación, eliminación y cambio de nombre de archivos y directorios, y la manipulación de atributos de archivo , como la marca de tiempo de solo lectura y la última modificación . Los objetos que representan directorios se pueden usar para obtener una lista de todos los archivos y directorios contenidos. File
File
La FileDescriptor
clase es un descriptor de archivo que representa una fuente o un receptor (destino) de bytes. Normalmente, se trata de un archivo, pero también puede ser una consola o una toma de red . FileDescriptor
los objetos se utilizan para crear File
corrientes. Se obtienen de File
flujos y java.net
sockets y sockets de datagramas.
java.nio
En J2SE 1.4, el paquete java.nio
(NIO o E / S sin bloqueo) se agregó para admitir E / S mapeadas en memoria , lo que facilita las operaciones de E / S más cercanas al hardware subyacente con un rendimiento a veces dramáticamente mejor. El java.nio
paquete proporciona soporte para varios tipos de búfer. El subpaquete java.nio.charset
proporciona soporte para diferentes codificaciones de caracteres para datos de caracteres. El subpaquete java.nio.channels
proporciona soporte para canales, que representan conexiones a entidades que son capaces de realizar operaciones de E / S, como archivos y sockets. El java.nio.channels
paquete también proporciona soporte para el bloqueo detallado de archivos.
java.math
El java.math
paquete admite aritmética de precisión múltiple (incluidas las operaciones aritméticas modulares) y proporciona generadores de números primos de precisión múltiple que se utilizan para la generación de claves criptográficas. Las principales clases del paquete son:
BigDecimal
- proporciona números decimales con signo de precisión arbitraria.BigDecimal
le da al usuario control sobre el comportamiento de redondeoRoundingMode
.BigInteger
: Proporciona números enteros de precisión arbitraria. Las operacionesBigInteger
no se desbordan ni pierden precisión. Además de las operaciones aritméticas estándar, proporciona aritmética modular , cálculo GCD , pruebas de primalidad , generación de números primos , manipulación de bits y otras operaciones diversas.MathContext
- encapsular la configuración de contexto que describe ciertas reglas para operadores numéricos.RoundingMode
- una enumeración que proporciona ocho comportamientos de redondeo.
java.net
El java.net
paquete proporciona rutinas de E / S especiales para redes, lo que permite solicitudes HTTP , así como otras transacciones comunes.
java.text
El java.text
paquete implementa rutinas de análisis para cadenas y admite varios lenguajes legibles por humanos y análisis específicos de la configuración regional.
java.util
Las estructuras de datos que agregan objetos son el foco del java.util
paquete. En el paquete se incluye la API de colecciones , una jerarquía de estructura de datos organizada influenciada en gran medida por las consideraciones de los patrones de diseño .
Paquetes de propósito especial
java.applet
Creado para admitir la creación de subprogramas de Java , el java.applet
paquete permite que las aplicaciones se descarguen a través de una red y se ejecuten dentro de una caja de arena protegida. Las restricciones de seguridad se imponen fácilmente en la zona de pruebas. Un desarrollador, por ejemplo, puede aplicar una firma digital a un subprograma, etiquetándolo como seguro. Al hacerlo, el usuario puede otorgar permiso al subprograma para realizar operaciones restringidas (como acceder al disco duro local) y eliminar algunas o todas las restricciones de la zona de pruebas. Los certificados digitales son emitidos por autoridades de certificación .
java.beans
En el java.beans
paquete se incluyen varias clases para desarrollar y manipular beans, componentes reutilizables definidos por la arquitectura JavaBeans . La arquitectura proporciona mecanismos para manipular las propiedades de los componentes y activar eventos cuando esas propiedades cambian.
Las API de java.beans
están diseñadas para ser utilizadas por una herramienta de edición de beans, en la que los beans se pueden combinar, personalizar y manipular. Un tipo de editor de beans es un diseñador de GUI en un entorno de desarrollo integrado .
java.awt
El java.awt
, o Abstract Window Toolkit, proporciona acceso a un conjunto básico de widgets GUI basados en el conjunto de widgets de la plataforma nativa subyacente, el núcleo del subsistema de eventos GUI y la interfaz entre el sistema de ventanas nativo y la aplicación Java. También proporciona varios administradores de diseño básicos , un paquete de transferencia de datos para usar con el Portapapeles y Arrastrar y soltar , la interfaz para dispositivos de entrada como ratones y teclados , así como acceso a la bandeja del sistema en los sistemas de soporte. Este paquete, junto con, javax.swing
contiene la mayor cantidad de enumeraciones (7 en total) en JDK 6.
java.rmi
El java.rmi
paquete proporciona la invocación de métodos remotos de Java para admitir llamadas a procedimientos remotos entre dos aplicaciones Java que se ejecutan en diferentes JVM .
java.security
El java.security
paquete incluye soporte para seguridad, incluido el algoritmo de resumen de mensajes .
java.sql
Una implementación de la API JDBC (utilizada para acceder a bases de datos SQL ) se agrupa en el java.sql
paquete.
javax.rmi
El javax.rmi
paquete proporciona soporte para la comunicación remota entre aplicaciones, utilizando el protocolo RMI sobre IIOP. Este protocolo combina características RMI y CORBA.
Tecnologías Java SE Core - CORBA / RMI-IIOP
javax.swing
Swing es una colección de rutinas que se basan en java.awt
proporcionar un conjunto de herramientas de widgets independiente de la plataforma . javax.swing
utiliza las rutinas de dibujo 2D para representar los componentes de la interfaz de usuario en lugar de depender del soporte de la GUI del sistema operativo nativo subyacente .
Este paquete contiene la mayor cantidad de clases (133 en total) en JDK 6. Este paquete, junto con java.awt
también contiene la mayor cantidad de enumeraciones (7 en total) en JDK 6. Admite aspectos y sensaciones conectables (PLAF) para que los widgets en la GUI puede imitar los del sistema nativo subyacente. Los patrones de diseño impregnan el sistema, especialmente una modificación del patrón modelo-vista-controlador , que afloja el acoplamiento entre función y apariencia. Una inconsistencia es que (a partir de J2SE 1.3) las fuentes son dibujadas por el sistema nativo subyacente, y no por Java, lo que limita la portabilidad del texto. Existen soluciones alternativas, como el uso de fuentes de mapa de bits. En general, los "diseños" se utilizan y mantienen los elementos dentro de una GUI estéticamente coherente en todas las plataformas.
javax.swing.text.html.parser
El javax.swing.text.html.parser
paquete proporciona el analizador HTML tolerante a errores que se utiliza para escribir varios navegadores web y bots web.
javax.xml.bind.annotation
El javax.xml.bind.annotation
paquete contiene la mayor cantidad de tipos de anotaciones (30 en total) en JDK 6. Define anotaciones para personalizar los elementos del programa Java en la asignación de esquemas XML.
Paquetes OMG
org.omg.CORBA
El org.omg.CORBA
paquete proporciona soporte para la comunicación remota entre aplicaciones que utilizan el Protocolo General Inter-ORB y admite otras características de la arquitectura de intermediario de solicitudes de objetos comunes . Al igual que RMI y RMI-IIOP , este paquete es para llamar a métodos remotos de objetos en otras máquinas virtuales (generalmente a través de la red).
Este paquete contiene el mayor número de Exception
clases (45 en total) en JDK 6. De todas las posibilidades de comunicación, CORBA es portátil entre varios idiomas; sin embargo, esto conlleva una mayor complejidad.
Estos paquetes quedaron obsoletos en Java 9 y se eliminaron de Java 11. [7]
org.omg.PortableInterceptor
El org.omg.PortableInterceptor
paquete contiene la mayor cantidad de interfaces (39 en total) en JDK 6. Proporciona un mecanismo para registrar ganchos ORB a través de los cuales los servicios ORB interceptan el flujo normal de ejecución del ORB.
Seguridad
Se han informado varias vulnerabilidades de seguridad críticas. [8] [9] Las alertas de seguridad de Oracle anuncian parches críticos relacionados con la seguridad para Java SE. [10]
Referencias
- ^ "Descripción general de Java SE" . Oracle Corporation . Consultado el 26 de febrero de 2017 .
- ^ "Contenido de la versión de Java SE 6" . Oracle Corporation y / o sus afiliadas . Consultado el 1 de enero de 2013 .
- ^ Pasando a OpenJDK como la implementación de referencia oficial de Java SE 7
- ^ Plataforma Java, Implementaciones de referencia de la edición estándar 7
- ^ "Implementaciones de referencia de Java Platform, Standard Edition 8" . Archivado desde el original el 21 de noviembre de 2015.
- ^ "Descripción general de las solicitudes de especificación de Java" . Oracle Corporation y / o sus afiliadas . Consultado el 1 de enero de 2013 .
- ^ https://openjdk.java.net/jeps/320
- ^ Peligrosa vulnerabilidad en la última versión de Java, The H Security, 10 de enero de 2013
- ^ Darlene Storm (25 de septiembre de 2012). "Otra vulnerabilidad crítica de Java pone en riesgo a mil millones de usuarios" . Blog de seguridad de Computerworld . Archivado desde el original el 13 de enero de 2013 . Consultado el 11 de enero de 2013 .
- ^ "Actualizaciones de parches críticos, alertas de seguridad y boletín de terceros" . Oráculo.
enlaces externos
- Java SE de Oracle Technology Network
- Javadocs de la API de Java SE 10
- Documentación de la API de Java SE
- JSR 270 (Java SE 6)
- 1.8
- 1,7
- 1,6