stringtranslate.com

Plataforma Java, edición estándar

Java Platform, Standard Edition ( Java SE ) es una plataforma informática para el desarrollo e implementación de código portable para entornos de escritorio y servidor . [1] Java SE era anteriormente conocido como Java 2 Platform, Standard Edition ( J2SE ).

La plataforma utiliza el lenguaje de programación Java y forma parte de la familia de plataformas de software Java . Java SE define una serie de API de propósito general (como las API de Java para la biblioteca de clases 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 cambios principales 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 Java Community Process , que produce descripciones de especificaciones propuestas y finales para la plataforma Java llamadas Java Specification Requests (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 de Java SE, más una serie de clases que son más útiles para 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 celulares , PDA y decodificadores .

Java Runtime Environment (JRE) y Java Development Kit (JDK) son los archivos reales que se descargan e instalan en una computadora para ejecutar o desarrollar programas Java, respectivamente.

Paquetes de uso general

java.lang

El paquete Java contiene clases e interfacesjava.lang fundamentales estrechamente vinculadas al lenguaje y al sistema de ejecución . Esto incluye las clases raíz que forman la jerarquía de clases , los tipos vinculados a la definición del lenguaje, las excepciones básicas , las funciones matemáticas, el subprocesamiento , las funciones de seguridad, así como información sobre el sistema nativo subyacente. Este paquete contiene 22 de las 32 clases proporcionadas en JDK 6.Error

Las principales clases e interfaces java.langson:

Las clases java.langse importan automáticamente a cada archivo fuente .

java.lang.ref

El java.lang.refpaquete proporciona tipos de referencias más flexibles que los que se encuentran disponibles de otro modo, lo que permite una interacción limitada entre la aplicación y el recolector de elementos no utilizados de la Máquina Virtual Java (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 tiene un propósito un tanto especial y no lo utilizan 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.refpaquete define otros tres tipos de referencias: referencias suaves, débiles y fantasmas. Cada tipo de referencia está diseñado para un uso específico.

Cada uno de estos tipos de referencia extiende la Referenceclase, que proporciona el get() método para devolver una referencia fuerte al objeto de referencia (o nullsi se ha borrado la referencia o si el tipo de referencia es fantasma) y el clear()método para borrar la referencia.

También java.lang.refdefine la clase ReferenceQueue, que se puede utilizar en cada una de las aplicaciones analizadas anteriormente para realizar un seguimiento de los objetos que han cambiado el tipo de referencia. Cuando Referencese crea un objeto, se registra opcionalmente en una cola de referencias. La aplicación sondea la cola de referencias para obtener las referencias que han cambiado el estado de accesibilidad.

java.lang.reflect

Reflection es un componente de la API de Java que permite que el código Java examine y "refleje" sobre los componentes de Java en tiempo de ejecución y utilice los miembros reflejados. Las clases del java.lang.reflectpaquete, junto con java.lang.Classy java.lang.Packageadmiten aplicaciones como depuradores , intérpretes , inspectores de objetos, exploradores de clases y servicios como serialización de objetos y JavaBeans que necesitan acceso a los miembros públicos de un objeto de destino (según su clase de tiempo de ejecución) o a los miembros declarados por una clase determinada. Este paquete se agregó en JDK 1.1.

La reflexión se utiliza para crear instancias de clases e invocar métodos utilizando 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 se apoya en los metadatos que la JVM tiene sobre el programa.

Técnicas

Existen técnicas básicas implicadas en la reflexión:

Descubrimiento

El descubrimiento generalmente comienza con un objeto y llamando al Object.getClass()método para obtener el contenido del objeto Class. El Classobjeto tiene varios métodos para descubrir el contenido de la clase, por ejemplo:

Utilizar por nombre

El Classobjeto se puede obtener mediante descubrimiento, utilizando el literal de clase (p. ej MyClass.class. ) o utilizando el nombre de la clase (p. ej. Class.forName("mypackage.MyClass")). Con un Classobjeto, se pueden obtener miembros Method, Constructoru Fieldobjetos utilizando el nombre simbólico del miembro. Por ejemplo:

MethodSe pueden utilizar objetos , Constructor, y para acceder de forma dinámica al miembro representado de la clase. Por ejemplo:Field

Matrices y proxies

El java.lang.reflectpaquete también proporciona una Arrayclase que contiene métodos estáticos para crear y manipular objetos de matriz y, desde J2SE 1.3, una Proxyclase que admite la creación dinámica de clases proxy que implementan interfaces específicas.

La implementación de una Proxyclase se realiza mediante un objeto suministrado que implementa la InvocationHandlerinterfaz. El método InvocationHandler's invoke(Object, Method, Object[])se llama para cada método invocado en el objeto proxy: el primer parámetro es el objeto proxy, el segundo parámetro es el Methodobjeto 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 la interfaz. El invoke()método devuelve un Objectresultado que contiene el resultado devuelto al código que llamó al método de la interfaz proxy.

java.io

El java.iopaquete contiene clases que admiten entrada y salida . Las clases del paquete están principalmente orientadas a flujos de datos ; 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 .InputStreamOutputStreamReaderWriter

Arroyos

Las clases de flujo siguen el patrón de decorador al extender la subclase base para agregar características a las clases de flujo. Las subclases de las clases de flujo base suelen recibir el nombre de uno de los siguientes atributos:

Las subclases de flujo se nombran utilizando el patrón XxxStreamType de nombres donde Xxxes el nombre que describe la característica y StreamTypees uno de InputStream, OutputStream, Readero Writer.

La siguiente tabla muestra las fuentes/destinos soportados directamente por el java.iopaquete:

Otros paquetes de biblioteca estándar proporcionan implementaciones de flujo para otros destinos, como el InputStreamdevuelto por el método o la clase java.net.Socket.getInputStream()Java EE .javax.servlet.ServletOutputStream

El manejo y procesamiento de tipos de datos o el filtrado de datos de flujo se logran 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 incluido con características adicionales. Los filtros se crean ampliando una de las clases de filtro base FilterInputStream, FilterOutputStream, FilterReadero FilterWriter.

Las clases Readery Writerson simplemente secuencias de bytes con un procesamiento adicional realizado en la secuencia 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 el Charsetdevuelto por el java.nio.charset.Charset.defaultCharset()método estático. La InputStreamReaderclase convierte un InputStreamen un Readery la OutputStreamWriterclase convierte un OutputStreamen un 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 utiliza la codificación predeterminada para la plataforma.

La siguiente tabla muestra los demás procesos y filtros que el java.iopaquete admite directamente. Todas estas clases extienden la Filterclase correspondiente.

Acceso aleatorio

La RandomAccessFileclase admite la lectura y escritura de archivos mediante 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 de forma implícita al leer o escribir y de forma explícita al llamar a los métodos seek(long)o skipBytes(int). El método devuelve la posición actual del puntero de archivo getFilePointer().

Sistema de archivos

La Fileclase representa una ruta de archivo o directorio 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 solo lectura y marca de tiempo de última modificación . Los objetos que representan directorios se pueden usar para obtener una lista de todos los archivos y directorios contenidos.FileFile

La FileDescriptorclase es un descriptor de archivo que representa una fuente o un destino de bytes. Normalmente, se trata de un archivo, pero también puede ser una consola o un socket de red . FileDescriptorLos objetos se utilizan para crear Fileflujos. Se obtienen de Fileflujos y java.netsockets y sockets de datagramas.

java.nio

En J2SE 1.4, java.niose agregó el paquete (NIO o Non-blocking I/O) 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 mucho mejor. El java.niopaquete proporciona soporte para varios tipos de búfer. El subpaquete java.nio.charsetproporciona soporte para diferentes codificaciones de caracteres para datos de caracteres. El subpaquete java.nio.channelsproporciona soporte para canales, que representan conexiones a entidades que son capaces de realizar operaciones de E/S, como archivos y sockets. El java.nio.channelspaquete también proporciona soporte para el bloqueo de archivos de grano fino.

Java.matemáticas

El java.mathpaquete admite operaciones aritméticas 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 clases principales del paquete son:

Java.net

El java.netpaquete proporciona rutinas de E/S especiales para redes, permitiendo solicitudes HTTP , así como otras transacciones comunes.

java.text

El java.textpaquete implementa rutinas de análisis para cadenas y admite varios idiomas legibles por humanos y análisis específico de la configuración regional.

java.util

Las estructuras de datos que agregan objetos son el foco del java.utilpaquete. El paquete incluye la API de colecciones , una jerarquía de estructuras de datos organizadas influenciada en gran medida por las consideraciones de los patrones de diseño .

Paquetes para propósitos especiales

programa java.applet

Creado para respaldar la creación de subprogramas Java , el java.appletpaquete permite que las aplicaciones se descarguen a través de una red y se ejecuten dentro de un entorno protegido. Las restricciones de seguridad se imponen fácilmente en el entorno protegido. Un desarrollador, por ejemplo, puede aplicar una firma digital a un subprograma, etiquetándolo así como seguro. Al hacerlo, el usuario puede otorgarle permiso al subprograma para realizar operaciones restringidas (como acceder al disco duro local) y eliminar algunas o todas las restricciones del entorno protegido. Los certificados digitales son emitidos por autoridades de certificación .

frijoles java

El java.beanspaquete incluye varias clases para desarrollar y manipular beans, componentes reutilizables definidos por la arquitectura JavaBeans . La arquitectura proporciona mecanismos para manipular propiedades de componentes y activar eventos cuando esas propiedades cambian.

Las API de java.beansestán pensadas para que las utilice una herramienta de edición de beans, en la que se pueden combinar, personalizar y manipular los beans. Un tipo de editor de beans es un diseñador de GUI en un entorno de desarrollo integrado .

java.awt

El java.awtpaquete de herramientas Abstract Window Toolkit proporciona acceso a un conjunto básico de widgets de GUI basados ​​en el conjunto de widgets de la plataforma nativa subyacente, el núcleo del subsistema de eventos de 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 sistemas compatibles. Este paquete, junto con javax.swingcontiene la mayor cantidad de enumeraciones (7 en total) en JDK 6.

java.rmi

El java.rmipaquete proporciona invocación de método remoto Java para soportar llamadas a procedimientos remotos entre dos aplicaciones Java que se ejecutan en diferentes JVM .

seguridad java

java.securityEl 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 paquete.java.sql

javax.rmi

El javax.rmipaquete 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 principales de Java SE: CORBA / RMI-IIOP

javax.swing

Swing es una colección de rutinas que se basan java.awten proporcionar un conjunto de herramientas de widgets independiente de la plataforma . javax.swingUtiliza 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.awttambién contiene la mayor cantidad de enumeraciones (7 en total) en JDK 6. Admite apariencias conectables (PLAF) para que los widgets en la GUI puedan imitar a los del sistema nativo subyacente. Los patrones de diseño permean 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, se utilizan "diseños" y se mantienen los elementos dentro de una GUI estéticamente consistente en todas las plataformas.

analizador javax.swing.text.html

El javax.swing.text.html.parserpaquete proporciona el analizador HTML tolerante a errores que se utiliza para escribir varios navegadores web y bots web.

anotación javax.xml.bind

El javax.xml.bind.annotationpaquete contiene la mayor cantidad de tipos de anotaciones (30 en total) en JDK 6. Define anotaciones para personalizar los elementos del programa Java para la asignación de esquemas XML.

Paquetes OMG

org.omg.CORBA

El org.omg.CORBApaquete 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 sirve para llamar a métodos remotos de objetos en otras máquinas virtuales (normalmente a través de la red).

Este paquete contenía la mayor cantidad de Exceptionclases (45 en total) en JDK 6. De todas las posibilidades de comunicación, CORBA es portable entre varios lenguajes; sin embargo, esto conlleva una mayor complejidad.

Estos paquetes quedaron obsoletos en Java 9 y se eliminaron de Java 11. [7]

org.omg.Interceptor portátil

El org.omg.PortableInterceptorpaquete contenía 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

  1. ^ "Descripción general de Java SE". Oracle Corporation . Consultado el 26 de febrero de 2017 .
  2. ^ "Contenido de la versión Java SE 6". Oracle Corporation y/o sus filiales . Consultado el 1 de enero de 2013 .
  3. ^ Pasando a OpenJDK como la implementación de referencia oficial de Java SE 7
  4. ^ Implementaciones de referencia de la plataforma Java, edición estándar 7
  5. ^ "Implementaciones de referencia de la plataforma Java, edición estándar 8". Archivado desde el original el 21 de noviembre de 2015.
  6. ^ "Descripción general de las solicitudes de especificación de Java". Oracle Corporation y/o sus filiales . Consultado el 1 de enero de 2013 .
  7. ^ "JEP 320: Eliminar los módulos Java EE y CORBA". Openjdk.java.net. 23 de mayo de 2019. Consultado el 20 de marzo de 2022 .
  8. ^ Vulnerabilidad peligrosa en la última versión de Java The H Security, 10 de enero de 2013
  9. ^ 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 .
  10. ^ "Actualizaciones de parches críticos, alertas de seguridad y boletines de terceros". Oracle.

Enlaces externos