Java SE
De Wikipedia, la enciclopedia libre
Plataforma Java Micro Edition (ME) |
Plataforma Java Standard Edition (SE) |
Plataforma Java Enterprise Edition (EE) |
Java Platform, Standard Edition o Java SE (conocido anteriormente hasta la versión 5.0 como Plataforma Java 2, Standard Edition o J2SE), es una colección de APIs del lenguaje de programación Java utiles para muchos programas de la Plataforma Java. La Plataforma Java 2, Enterprise Edition incluye todas las clases en el Java SE, además de algunas de las cuales son útiles para programas que se ejecutan en servidores sobre workstations.
Comenzando con la versión J2SE 1.4 (Merlin), la plataforma Java SE ha sido desarrollada bajo la supervisión del Java Community Process. JSR 59 la especificación para J2SE 1.4 y JSR 176 especificó J2SE 5.0 (Tiger). En 2006, Java SE 6 (Mustang) está siendo desarrollada bajo el JSR 270.
Lo siguiente son descripciones de algunos de los principales paquetes Java SE.
Tabla de contenidos |
[editar] Paquetes de Propósito general
[editar] java.lang
El paquete Java java.lang
contiene clases fundamentales e interfaces fuertemente relacionadas con el lenguaje y el sistema runtime. Esto incluye las clases raíz que forman la jerarquía de clases, tipos relacionados con la definición del lenguaje, excepciones básicas, funciones matemáticas, Hilos, funciones de seguridad, así como también alguna información sobre el sistema nativo subyacente.
Las principales clases en java.lang
son:
Object
– la clase que es la raíz de toda la jerarquía de clases.Enum
– la clase base para las clases enumeration (propias de J2SE 5.0).Class
– la clase que es la raíz del sistema de reflexión Java.Throwable
– la clase que es la clase base de la jerarquía de clases de excepciones.Error
,Exception
, yRuntimeException
– las clases base de cada tipo de excepción.Thread
– la clase que permite operaciones con hilos.String
– la clase para cadenas String y literales.StringBuffer
yStringBuilder
– clases para realizar manipulación de strings(StringBuilder
como parte de J2SE 5.0).Comparable
– la interfaz que permite comparación genérica y ordenamiento de objetos (como parte de J2SE 1.2).Iterable
– la interfaz que permite iteración genérica usando el buclefor
mejorado (como parte J2SE 5.0).ClassLoader
,Process
,Runtime
,SecurityManager
, ySystem
– clases que suministran "operaciones del sistema" que gestionan la enlazado dinámico de clases, creación de procesos externos, investigaciones del entorno del host tales como la hora del día, y refuerzo de políticas de seguridad.- Las clases
Math
yStrictMath
– suministran funciones matemáticas básicas tales como seno, coseno, y raíz cuadrada(StrictMath
forma parte de J2SE 1.3). - Las clases wrapper primitivas encapsulan tipos primitivos como objetos.
- Las clases exception básicas lanzan excepciones del nivel del lenguaje y otras excepciones comunes.
Las clases de java.lang
son importadas automáticamente a cada Fichero fuente.
[editar] java.lang.ref
El paquete es importado automáticamente a cada Fichero fuente. El paquete java.lang.ref
suministra tipos más flexibles de Referencias que otros disponibles, permitiendo interacción limitada entre la aplicación y la recolección de basura de la Máquina virtual java (JVM) . Es un paquete importante, suficientemente céntrico al lenguaje para que los diseñadores del lenguaje le den un nombre que comience por "java.lang", pero es de propósito especial, y no usado por muchos desarrolladores. Este paquete se añadió en J2SE 1.2.
Java tiene un sistema de referencias más expresivo que la mayoría de los otros lenguajes de programación que la emplean, lo cual permite comportamiento especial para recolección de basura. Una referencia normal en Java se conoce como una referencia fuerte. El paquete java.lang.ref
define otros tipos de referencias—referencias soft, weak, y fantasma. Cada tipo de referencia está diseñado para uso específico.
Una SoftReference
puede usarse para implementar una cache. Un objeto que no es recuperable por una referencia fuerte (esto es, no es recuperable fuertemente), pero que está referenciado por una referencia soft se llama recuperable softly. Un objeto recuperable softly puede ser recolectado como basura a decisión del recolector de basura. Esto generalmente significa que los objetos recuperables softly solo serán recolectados cuando la memoria libre sea baja, pero también, es la decisión del recolector de basura. Semánticamente, una referencia soft significa "manten este objeto a menos que la memoria se necesite."
Una WeakReference
se usa para implementar mapas weak. Un objeto que no es recuperable fuertemente o softly, pero se referencia por una referencia weak que se llamada "recuperable weakely". Un objeto recuperable weakly será recolectado a la basura durante el siguiente ciclo de recolección. Este comportamiento se usa en la clase WeakHashMap. Un mapa weak permite al programador poner pares clave/valor en el mapa y no preocuparse que los objetos tomen memoria cuando la clave ya no sea recuperable en ningún sitio más. Semánticamente, una referencia weak significa "conseguir la liberación de este objeto cuando nada más lo referencia."
Una PhantomReference
se usa para referenciar objetos que han sido marcados para recolección de basura y han sido finalizados, pero no han sido aún reclamados. Un objeto que no es recuperable fuertemente, softly o weakly, pero es referenciado por una referencia fantasma se llama recuperable fantasma. Esto permite limpieza más flexible que es posible con el mecanismo de finalización solo. Semánticamente, una referencia fantasma significa "este objeto no se necesita más y ha sido finalizado en preparación a ser recolectado."
Cada uno de esos tipos de referencia extienden la clase Reference
la cual suministra el método get()
para devolver una referencia fuerte al objeto referido (o null
si la referencia ha sido aclarada o si el tipo de referencia es fantasma), y el método clear()
para limpiar la referencia.
java.lang.ref
también define la ReferenceQueue
de clase, la cual puede usarse en cada aplicación discutida sobre mantener la pista de los objetos que han cambiado el tipo de referencia. Cuando una Reference
se crea está registrado opcionalmente con una cola de referencias. La aplicación encuesta la cola de referencias para obtener referencias que han cambiado el estado de alcanzabilidad.
[editar] java.lang.reflect
Reflexión (programación) es un componente de la API Java la cual permite al código Java examinar y "reflexionar" sobre los componentes Java en tiempo de ejecución y para usar miembros reflexionados. Las Clases en este paquete, junto con java.lang.Class
y java.lang.Package
acomodan aplicaciones tales como depuradores, interpretes, inspectores de objetos, navegadores de clases, y servicios tales como Serialización de objetos y JavaBeans que necesitan acceso a miembros públicos del objeto objetivo (basándose en su clase runtime) o a los miembros declarados por una clase dada. Este paquete fue añadido 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. Clases, interfaces, métodos, campos, y constructores pueden ser todos descubiertos y usados en tiempo de ejecución. Reflexión se soporta por los metadatos que la JVM posee sobre el programa. Hay dos técnicas básicas involucradas en la reflexión:
- Descubrimiento conlleva tomar un objeto o clase y descubrir los miembros, superclases, interfaces implementadas, y después usar posiblemente los elementos descubiertos.
- Usar por nombre conlleva empezar con el nombre simbólico de un elemento y usar el elemento nombrado.
[editar] Descubrimiento
El Descubrimiento normalmente empieza con un objeto y llamando al método Object.getClass()
para obtener la clase del objeto. El objeto Class
tiene varios métodos para descubrir los contenidos de la clase, por ejemplo:
getMethods()
– devuelve un array de objetos Method que representan los métodos publicos de la clase o interfacegetConstructors()
– devuelve un array de objetos Constructor que representan todos los constructores públicos de la clasegetFields()
– devuelve un array de objetos java/lang/reflect|Field que representan todos los campos públicos de la clase o interfacegetClasses()
– devuelve un array de objetos Class representando todas las clases e interfaces públicas que son miembros de la clase o interfacegetSuperclass()
– devuelve el objetoClass
que representa la superclase de la clase o interfacegetInterfaces()
– devuelve un array de objetosClass
que representan todas las interfaces que se implementan por la clase o la interface
[editar] Usar por nombre
El objeto Class
puede obtenerse a través de descubrimiento, usando la clase literal (e.g. MyClass.class
) o usando el nombre de la clase( e.g. Class.forName("mypackage.MyClass")
) ). Con un objeto Class
, Method
miembro, Constructor
, u objetos Field
pueden obtenerse usando el nombre simbólico del miembro. Por ejemplo:
getMethod("methodName", Class...)
– devuelve el objetoMethod
que representa el método público con el nombre "methodName" de la clase o interface que acepta los parámetros especificados por los parámetrosClass...
parameters.getConstructor(Class...)
– devuelve el objetoConstructor
que representa el constructor público de la clase que acepta los parámetros especificados por laClass...
.getField("fieldName")
– devuelve el objetoField
que representa el campo público con el nombre "fieldName" de la clase o la interface.
Los Objetos Method
, Constructor
, y Field
pueden usarse para acceder dinámicamente al miembro representado de la clase. Por ejemplo:
Field.get(Object)
– devuelve unObject
que contiene el valor del campo desde la instancia del objeto pasado aget()
.Method.invoke(Object, Object...)
– devuelve unObject
que contiene el resultado de invocar el método para la instancia del primer parámetroObject
pasado ainvoke()
. Los parámetrosObject...
restantes son pasados al método.Constructor.newInstance(Object...)
– devuelve la nueva instanciaObject
invocando al constructor. Los parámetrosObject...
son pasados al constructor. (Date cuente de que el constructor sin parámetros para una clase puede también ser invocado llamando anewInstance()
).
[editar] Arrays y proxies
El paquete java.lang.reflect
también suministra una clase Array que contiene métodos estáticos para crear y manipular objetos array, y desde J2SE 1.3, una clase Proxy que suministra creación dinámica de clases proxy que implementan las interfaces especificadas.
La implementación de una clase Proxy
se suministra por un objeto dado que implementa la interface InvocationHandler. El método invoke(java.lang.Object,java.lang.reflect.Method,java.lang.Object[]) de InvocationHandler
es llamado por cada método invocado en el objeto proxy—el primer parámetro es el objeto proxy, el segundo parámetro es el objeto Method
que representa el método desde el que la interface implementó al proxy, y el tercer parámetro es el array de parámetros pasado al método interface. El método invoke()
devuelve un resultado Object
que contiene el resultado devuelto al código que llamó al método interface proxy.
[editar] java.io
El paquete java.io
contiene clases que soportan entrada/salida. Las clases del paquete son principalmente streams; sin embargo, se incluye una clase para ficheros de acceso aleatorio. Las clases centrales del paquete son InputStream y OutputStream las cuales son clases abstractas base para leer de y escribir a streams de bytes, respectivamente. Las clases relacionadas Reader y Writer son clases abstractas base para leer de y escribir a streams de caracteres, respectivamente. El paquete también tiene unas pocas clases misceláneas para soportar la interacción con el Sistema de ficheros del computador.
[editar] Streams
Las clases stream siguen el patron decorator extendiendo la subclase base para añadir características a las clases stream. Las Subclases de las clases base stream son nombradas típicamente por uno de los siguientes atributos:
- la fuente/destino de los datos del stream
- el tipo de los datos escritos a/leidos de el stream
- procesamiento adicional o filtrado realizado en los datos del stream
Las subclases stream son nombradas usando el patrón naming 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 soportados directamente por el paquete java.io
:
-
Fuente/Destino Nombre tipos de Stream In/Out Clases byte array ( byte[]
)ByteArray
byte in, out ByteArrayInputStream, ByteArrayOutputStream char array ( char[]
)CharArray
char in, out CharArrayReader, CharArrayWriter file File
byte, char in, out FileInputStream, FileOutputStream, FileReader, FileWriter string ( StringBuffer y StringBuilder
)String
char in, out StringReader, StringWriter thread ( Thread
)Piped
byte, char in, out PipedInputStream, PipedOutputStream, PipedReader, PipedWriter
Otros paquetes de librería estándar suministran implementaciones de stream para otros destinos, tales como el InputStream
devuelto por el método Socket|getInputStream() o la clase Java EE javax/servlet|ServletOutputStream.
El manejo y procesamiento de tipos de datos o filtrado de los datos de stream se realiza a través de filtros de stream. Las clases filter aceptan otros objetos de stream compatibles como parámetro para el constructor y decoran el stream contenido con características adicionales. Los Filtros se crean extendiendo una de las clases base filter FilterInputStream, FilterOutputStream, FilterReader, o FilterWriter.
Las clases Reader
y Writer
son justamente streams de bytes con procesamiento adicional realizado en el stream de datos para convertir los bytes a caracteres. Utilizan la codificación de caracteres por defecto para la plataforma, la cual desde J2SE 5.0 se representa por el Charset devuelto por el método estático java/nio/charset|Charset|defaultCharset(). La clase java/io|InputStreamReader convierte un InputStream
a un Reader
y la clase java/io|OutputStreamWriter convierte un OutputStream
a un Writer
. Ambas clases tienen constructores que permiten la codificación de caracteres que sea especificada—si no se especifica ninguna codificación entonces se usa la codificación por defecto para la plataforma.
La siguiente tabla muestra los otros procesos y filtros soportados directamente por el paquete java.io
. Todas esas clases extienden la clase Filter
correspondiente.
-
Operación Nombre tipos de Stream In/Out Clases buffering Buffered
byte, char in, out BufferedInputStream, java/io|BufferedOutputStream, java/io|BufferedReader, java/io|BufferedWriter "push back" el último valor leído Pushback
byte, char in PushbackInputStream, java/io|PushbackReader tipos primitivos read/write Data
byte in, out DataInputStream, java/io|DataOutputStream serialización de objetos (leer/escribir objetos) Object
byte in, out ObjectInputStream, java/io|ObjectOutputStream
[editar] Acceso aleatorio
La clase RandomAccessFile soporta lectura y escritura de acceso aleatorio de ficheros. La clase usa un puntero a fichero que representa un byte-offset dentro del fichero para la siguiente operación de lectura o escritura. El puntero a fichero se mueve implicitamente leyendo o escribiendo y explícitamente llamando a los métodos java/io|RandomAccessFile|seek(long) o java/io|RandomAccessFile|skipBytes(int). La posición actual del puntero de fichero se devuelve por el método java/io|RandomAccessFile|getFilePointer().
[editar] Sistema de Ficheros
La clase java/io|File representa un path de fichero o directorio en un Sistema de ficheros. Los objetos File
soportan la creación, borrado y renombrado de ficheros y directorios y la manipulación de atributos de ficheros tales como solo lectura y tiempo de última vez modificado. Los objetos File
que representan directorios pueden usarse para obtener una lista de todos los ficheros y directorios contenidos.
La clase java/io|FileDescriptor}} es un descriptor de ficheros que representan una fuente o sumidero (destino) de bytes. Normalmente esto es un fichero, pero puede también ser una consola o un socket de red. Los objetos FileDescriptor
se usan para crear streams de File
. Se obtienen desde streams File
y sockets java.net
y sockets de datagrama.
[editar] java.nio
En J2SE 1.4, el paquete java.nio
(NIO o Nueva I/O) fue añadido para soportar I/O mapeada en memoria, facilitando las operaciones I/O cercanas al hardware subyacente con mejor rendimiento. El paquete java.nio
suministra soporte para varios tipos de buffer. El subpaquete java/nio/charset suministra soporte para distintas codificaciones de caracteres para datos de tipo carácter. El subpaquete java/nio/channels suministra soporte para channels, las cuales representan conexiones a entidades que son capaces de realizar operaciones I/O, tales como ficheros y sockets. El paquete java.nio.channels
también suministra soporte para bloqueo de grano fino de los ficheros.
[editar] java.math
El paquete java.math soporta aritmética multiprecision (incluyendo operaciones aritméticas modulares) y suministra generadores de números primos multiprecision usados para la generación de claves criptográficas. Las clases principales de este paquete son:
- BigDecimal – suministra números decimales con signo de precisión arbitraria.
BigDecimal
da al usuario el control sobre el comportamiento de redondeo a través deRoundingMode
. - BigInteger – suministra enteros de precisión arbitraria. Las Operaciones con
BigInteger
no producen overflow o perdida de precisión. Además de las operaciones aritméticas estándar, suministra aritmética modular, calculo de mínimo común múltiplo, pruebas de números primos, generación de números primos, manipulación de bits, y otras operaciones misceláneas. - MathContext – encapsula las configuraciones de contexto las cuales describen ciertas reglas para operadores numéricos.
- RoundingMode – una enumeración que suministra ocho comportamientos de redondeo.
[editar] java.net
El paquete java.net
suminista rutinas especiales IO para redes, permitiendo las peticiones HTTP, así como también otras transacciones comúnes.
[editar] java.text
El paquete java.text
implementa rutinas de parseo para strings y soporta varios lenguajes legibles por el hombre y parseado específico de la localización.
[editar] java.util
Las estructuras de datos que agregan objetos son el foco del paquete java.util
. En el paquete está incluida la API Collections, una jerarquía organizada de estructura de datos influenciada fuertemente por considereaciones de patrones de diseño.
[editar] Paquetes de propósito especial
[editar] java.applet
Creado para soportar la creación de applet Java, el paquete java.applet
permite a las aplicaciones ser descargadas sobre una red y ejecutarse dentro de una sandbox. Las restricciones de seguridad son impuestas fácilmente en la sandbox. Un desarrollador, por ejemplo, puede aplicar una firma digital a un applet, en consecuencia etiquetándola como segura. Haciéndolo permite al usuario conceder permiso al applet para realizar operaciones restringidas (tales como acceder al disco duro local), y elimina alguna o todas las restricciones de la sandbox. Los certificados digitales son emitidos por agencias como Thawte o Entrust.
[editar] java.beans
Incluidos en el paquete java.beans
hay varias clases para desarrollar y manipular beans, componentes reutilizables definidos por la arquitectura JavaBeans. La arquitectura suministra mecanismos para manipular propiedades de componentes y lanzar eventos cuando esas propiedades cambian.
La mayoría de las APIs en java.beans
están pensadas para su uso po runa herramienta de edición de beans, en la cual los beans puedan combinarse, personalizarse y manipularse. Un tipo de editor bean es el diseñador GUI en un entorno de desarrollo integrado(IDE).
[editar] java.awt
La Abstract Window Toolkit contiene rutinas para soportar operaciones básicas GUI y utiliza ventanas básicas desde el sistema nativo subyacente. Muchas implementaciones independientes de la API Java implementan todo excepto AWT, el cual no es usado por la mayoría de las aplicaciones de lado de servidor. Este paquete también contiene la API de gráficos Java 2D.
[editar] java.rmi
El paquete java.rmi
suministra invocación a métodos remotos Java para soportar llamadas a procedimientos remotos entre dos aplicaciones Java que se ejecutna en diferentes JVM.
[editar] java.security
Soporte para seguridad, incluyendo el algoritmo de resumen de mensaje, está incluido en el paquete java.security
.
[editar] java.sql
Una implementación de la API JDBC (usada para acceder a bases de datos SQL) se agrupa en el paquete java.sql
.
[editar] javax.rmi
suministra el soporte para la comunicación remota entre aplicaciones, usando el protocolo RMI sobre IIOP. Este protocolo combina características de RMI y CORBA.
[editar] org.omg.CORBA
Suministra el soporte para comunicación remota entre aplicaciones usando general inter ORB protocol y soporta otras características de common object request broker architecture. Igual que RMI y RMI-IIOP, este paquete es para llamar métodos remotos de objetos en otras máquinas virtuales (normalmente por la red). De todas las posibilidades de comunicación CORBA es la más portable entre varios lenguajes. Sin embargo es también un poco dificil de comprender.
[editar] javax.swing
Swing es una colección de rutinas que se construyen sobre java.awt
para suministrar un toolkit de widgets independiente de plataforma. Swing usa las rutinas de dibujado 2D para renderizar los componentes de interfaz de usuario en lugar de confiar en el soporte GUI nativo subyacente del Sistema operativo.
Swing es un sistema muy rico por sí mismo, soportando pluggable looks and feels (PLAFs) para que los controles(widgets) en la GUI puedan imitar a aquellos del sistema nativo subyacente. Los patrones de diseño impregnan el sistema, especialmente una modificación del patrón modelo-vista-controlador, el cual afloja el acoplamiento entre función y apariencia. Una inconsistencia es que (para J2SE 1.3) las fuentes son dibujadas por el sistema nativo subyacente, limitando la portabilidad de texto. Mejoras, tales como usar fuentes de mapas de bits, existen. En general, las layouts(disposiciones de elementos) se usan y mantienen los elementos dentro de una GUI consistente a través de distintas plataformas.
[editar] javax.swing.text.html.parser
Suministra el parser de HTML tolerante a errores que se usa para escribir varios navegadores web y web bots.
[editar] Enlaces externos
- Página principal Java SE
- documentación de la API de Java SE
- JSR 270 (Java SE 6)
- JSR 176 (J2SE 5.0)
- JSR 59 (J2SE 1.4)
- Java software development kits (hasta Agosto del 2006):
- Open Source Java
- JavaHispano Programación en Java J2SE