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 portátil para entornos de escritorio y servidor . [1] Java SE se conocía anteriormente como plataforma Java 2, edición estándar ( 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 variedad de API de propósito 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 oficial de referencia 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 se cambió el nombre 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 como objetivo 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 ha cambiado varias veces a lo largo del historial de versiones de Java . A partir de J2SE 1.4 (Merlin), Java SE se desarrolló bajo el Proceso de la comunidad Java , que produce descripciones de las especificaciones propuestas y finales para la plataforma Java denominada Solicitudes de especificación 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 de Java SE, además de algunas que son más útiles para programas que se ejecutan en servidores que en 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 .

Java Runtime Environment (JRE) y Java Development Kit (JDK) son los archivos reales descargados e instalados 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 , tipos vinculados a la definición del lenguaje, excepciones básicas , funciones matemáticas, subprocesos , funciones de seguridad, así como cierta 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 en 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 están disponibles de otro modo, lo que permite una interacción limitada entre la aplicación y el recolector de basura 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 algo especial y no lo utilizan muchos desarrolladores. Este paquete se agregó en J2SE 1.2.

Java tiene un expresivo sistema 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ñada 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 la referencia se ha borrado o si el tipo de referencia es fantasma) y el clear()método para borrar la referencia.

java.lang.refTambién define la clase , ReferenceQueueque se puede utilizar en cada una de las aplicaciones analizadas anteriormente para realizar un seguimiento de los objetos que han cambiado de tipo de referencia. Cuando Referencese crea, opcionalmente se registra con una cola de referencia. La aplicación sondea la cola de referencias para obtener referencias que hayan 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. Clases en el java.lang.reflectpaquete, junto con java.lang.Classaplicaciones java.lang.Packagecomo depuradores , intérpretes , inspectores de objetos, navegadores 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 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 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 está respaldada por metadatos que la JVM tiene sobre el programa.

Técnicas

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

Descubrimiento

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

Usar 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, miembro Method, Constructoru Fieldobjetos se pueden obtener usando el nombre simbólico del miembro. Por ejemplo:

MethodLos objetos , Constructory Fieldse pueden utilizar para acceder dinámicamente al miembro representado de la clase. Por ejemplo:

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 la proporciona un objeto proporcionado que implementa la InvocationHandlerinterfaz. El InvocationHandlermétodo 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 interfaz. El invoke()método devuelve un Objectresultado que contiene el resultado devuelto al código que llamó al método de interfaz proxy.

java.io

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

Corrientes

Las clases de flujo siguen el patrón 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 nombres de uno de los siguientes atributos:

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

La siguiente tabla muestra los orígenes/destinos admitidos directamente por el java.iopaquete:

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

El manejo y procesamiento de tipos de datos 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 ampliando una de las clases de filtro base FilterInputStream, FilterOutputStream, FilterReadero FilterWriter.

Las clases Readery Writerson 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 el método Charsetdevuelto por el java.nio.charset.Charset.defaultCharset()método estático. La InputStreamReaderclase convierte an InputStreamen a Readery la OutputStreamWriterclase convierte an OutputStreamen a Writer. Ambas clases tienen constructores que permiten especificar 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 otros procesos y filtros que el java.iopaquete admite directamente. Todas estas clases amplían la Filterclase correspondiente.

Acceso aleatorio

La RandomAccessFileclase admite la lectura y escritura de archivos con 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 del archivo se mueve implícitamente mediante lectura o escritura y explícitamente llamando a los métodos seek(long)o skipBytes(int). El método devuelve la posición actual del puntero del 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 archivos como solo lectura y marca de tiempo de la última modificación . Los objetos que representan directorios se pueden utilizar 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 sumidero (destino) de bytes. Normalmente es un archivo, pero también puede ser una consola o un socket de red . FileDescriptorLos objetos se utilizan para crear Filesecuencias. Se obtienen a partir de Fileflujos, java.netsockets 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 asignadas 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.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 brinda soporte para el bloqueo detallado de archivos.

java.matemáticas

El java.mathpaquete admite aritmética de precisión múltiple (incluidas operaciones aritméticas modulares) y proporciona generadores de números primos de precisión múltiple utilizados para la generación de claves criptográficas. Las principales clases del paquete son:

java.net

El java.netpaquete proporciona rutinas IO especiales para redes, lo que permite solicitudes HTTP , así como otras transacciones comunes.

java.texto

El java.textpaquete implementa rutinas de análisis de 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.utilpaquete. 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 patrones de diseño .

Paquetes de propósito especial

java.applet

Creado para admitir la creación de subprogramas de Java , el java.appletpaquete permite descargar aplicaciones a través de una red y ejecutarlas dentro de un entorno limitado protegido. Las restricciones de seguridad se imponen fácilmente en el entorno sandbox. Un desarrollador, por ejemplo, puede aplicar una firma digital a un subprograma, etiquetándolo así como seguro. Hacerlo permite al usuario otorgar permiso al subprograma para realizar operaciones restringidas (como acceder al disco duro local) y elimina algunas o todas las restricciones de la zona de pruebas. Los certificados digitales son emitidos por autoridades certificadoras .

java.beans

En el java.beanspaquete 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 en java.beansestá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 sistemas compatibles. Este paquete, además, javax.swingcontiene la mayor cantidad de enumeraciones (7 en total) en JDK 6.

java.rmi

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

java.seguridad

El paquete incluye soporte para seguridad, incluido el algoritmo de resumen de mensajes java.security.

java.sql

En el paquete se agrupa una implementación de la API JDBC (utilizada para acceder a bases de datos SQL ) .java.sql

javax.rmi

El javax.rmipaquete proporcionó soporte para la comunicación remota entre aplicaciones, utilizando el protocolo RMI sobre IIOP. Este protocolo combina funciones RMI y CORBA.

Tecnologías principales de Java SE: CORBA / RMI-IIOP

javax.swing

Swing es una colección de rutinas que se construyen para proporcionar un kit de herramientas de widgetsjava.awt independiente de la plataforma . utiliza las rutinas de dibujo 2D para representar los componentes de la interfaz de usuario en lugar de depender del soporte GUI del sistema operativo nativo subyacente.javax.swing

Este paquete contiene la mayor cantidad de clases (133 en total) en JDK 6. Este paquete, además, java.awttambién contiene la mayor cantidad de enumeraciones (7 en total) en JDK 6. Admite apariencia y sensación conectables (PLAF) para que los widgets en la GUI pueden 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 las dibuja el sistema nativo subyacente y no 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 mantienen los elementos dentro de una GUI estéticamente consistente en todas las plataformas.

javax.swing.text.html.parser

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

javax.xml.bind.anotación

El javax.xml.bind.annotationpaquete contenía la mayor cantidad de tipos de anotaciones (30 en total) en JDK 6. Define anotaciones para personalizar elementos de programas Java para el mapeo de esquemas XML.

Paquetes Dios mío

org.omg.CORBA

El org.omg.CORBApaquete proporcionó soporte para la comunicación remota entre aplicaciones que utilizan el protocolo general Inter-ORB y admite otras características de la arquitectura del intermediario de solicitud de objetos común . 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 portátil entre varios idiomas; sin embargo, esto conlleva una mayor complejidad.

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

org.omg.PortableInterceptor

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". Corporación Oráculo . Consultado el 26 de febrero de 2017 .
  2. ^ "Contenidos de la versión de Java SE 6". Oracle Corporation y/o sus filiales . Consultado el 1 de enero de 2013 .
  3. ^ Pasar a OpenJDK como 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 solicitudes de especificaciones de Java". Oracle Corporation y/o sus filiales . Consultado el 1 de enero de 2013 .
  7. ^ "JEP 320: Retire los módulos Java EE y CORBA". Openjdk.java.net. 2019-05-23 . 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". Oráculo.

enlaces externos