Java SE
Aquest article o secció no cita les fonts o necessita més referències per a la seva verificabilitat. |
Tipus | plataforma informàtica |
---|---|
Part de | plataforma Java |
Java Platform, Standard Edition o Java SE (conegut anteriorment fins a la versió 5.0 com Plataforma Java 2, Standard Edition o J2SE), és una col·lecció de APIs del llenguatge de programació Java útils per a molts programes de la Plataforma Java. La Plataforma Java 2, Enterprise Edition inclou totes les classes de Java SE, afegint-ne algunes més, algunes de les quals són útils per a programes que s'executen en servidors sobre workstations.
Començant amb la versió J2SE 1.4 (Merlin), la plataforma Java SE ha set desenvolupada sota la supervisió del Java Community Process. L'especificació per a J2SE 1.4 és la JSR 59, per a J2SE 5.0 (Tiger) és la JSR 176, i per a Java SE 6 (Mustang) és la JSR 270.
Paquets de propòsit general
[modifica]El paquet Java java.lang
conté les classes fonamentals i interfícies fortament relacionades amb el llenguatge, així com el sistema runtime. Això inclou les classes arrel que formen la jerarquia de classes, els tipus relacionats amb la definició del llenguatge, les excepcions bàsiques, les funcions matemàtiques, els fils d'execució, les funcions de seguretat, i també alguna informació sobre el sistema natiu subjacent.
Les principals classes en java.lang
són:
- Object – la classe que és l'arrel de tota la jerarquia de classes.
- Enum – la classe base per a les classes enumeration (pròpies de J2SE 5.0).
- Class – la classe que és l'arrel del sistema de reflexió Java.
- Throwable – la classe que és l'arrel de la jerarquia de classes d'excepcions.
- Error, Exception, i RuntimeException – les classes base de cada tipus d'excepció.
- Thread– la classe que permet operacions amb fils.
- String – la classe per a cadenes String i literals.
- StringBuffer i StringBuilder – classes per a realitzar manipulació de strings(
StringBuilder
com a part de J2SE 5.0). - Comparable – la interfície que permet comparació genèrica i ordenament d'objectes (com a part de J2SE 1.2).
- Iterable – la interfície que permet iteració genèrica utilitzant el bucle
for
millorat (com a part J2SE 5.0). - ClassLoader, Process, Runtime,SecurityManager, i System – classes que subministrin "operacions del sistema" que gestionen l'enllaç dinàmic de classes, creació de processos externs, investigacions de l'entorno del host tals com l'hora del dia, i reforç de polítiques de seguretat.
- Les classes Math i StrictMath – subministrin funcions matemàtiques bàsiques tals com sinus, cosinus, i arrel quadrada(
StrictMath
forma part de J2SE 1.3). - Les classes wrapper primitives encapsin tipus primitius com objectes.
- Les classes exception bàsiques llancen excepcions del nivell del llenguatge i altres excepcions comuns.
Les classes de java.lang
són importades automàticament a cada Codi font.
El paquet és importat automàticament a cada codi font. El paquet java.lang.ref
subministra tipus més flexibles de referències que altres disponibles, permetent interacció limitada entre l'aplicació i la recol·lecció de brossa de la Màquina Virtual Java (JVM). És un paquet important, bastant cèntric al llenguatge perquè els dissenyadors del llenguatge li donin un nom que comenci per "java.lang", però és de propòsit especial, i no utilitzat per molts desenvolupadors. Aquest paquet es va afegir a J2SE 1.2.
Java té un sistema de referències més expressiu que la majoria dels altres llenguatges de programació que utilitzen referències, això permet un comportament especial per a la recol·lecció de brossa. Una referència normal a Java es coneix com una referència forta. El paquet java.lang.ref
defineix altres tipus de referències soft, weak, i fantasma. Cada tipus de referència està dissenyat per a un ús específic.
Una SoftReference pot utilitzar-se per implementar una cache. Un objecte que no és recuperable per una referència forta (és a dir, no és fortament recuperable), però que estigui referenciat per una referència soft s'anomena recuperable softly. Un objecte recuperable softly pot ser recol·lectat com a brossa a decisió del recol·lector de brossa. Això generalment significa que els objectes recuperables softly únicament seran recol·lectats quan la memòria lliure sigui baixa, però també, és la decisió del recol·lector de brossa. Semànticament, una referència soft significa "manté aquest objecte a menys que es necessiti memòria."
Una WeakReference s'utilitza per a implementar mapes weak. Un objecte que no és recuperable fortament o softly, però és referenciat per una referència weak, s'anomena "recuperable weakely". Un objecte recuperable weakly serà recol·lectat a la brossa durant el següent cicle de recol·lecció. Aquest comportament s'utilitza amb la classe WeakHashMap. Un mapa weak permet al programador ficar parells de clau/valor al mapa i no preocupar-se que els objectes prenguin memòria quan la clau ja no sigui recuperable en cap lloc més. Semànticament, una referència weak significa "aconseguir l'alliberació d'aquest objecte quan res més el referencia."
Una PhantomReference s'utilitza per a referenciar objectes que han set marcats per a recol·lecció de brossa i han set finalitzats, però no han set encara reclamats. Un objecte que no és recuperable fortament, softly o weakly, però és referenciat per una referència fantasma s'anomena recuperable fantasma. Això permet una neteja més flexible que la possible amb únicament el mecanisme de finalització. Semànticament, una referència fantasma significa "aquest objecte no es necessita més i ha set finalitzat amb preparació de ser recol·lectat."
Cada un d'aquests tipus de referència estenen la classe Reference la qual subministra el mètode get() per a retornar una referència forta a l'objecte referenciat (o null
si la referència ha set netejada o si el tipus de referència és fantasma), i el mètode clear() per a netejar la referència.
java.lang.ref
també defineix la classe ReferenceQueue, la qual pot utilitzar-se en cada aplicació per a mantindre la pista dels objectes que han canviat el tipus de referència. Quan una Reference
es crea opcionalment està sent enregistrada a una cua de referències. L'aplicació pregunta a la cua de referències per a obtindre les referències que han canviat l'estat d'alcançabilitat.
El paquet java.io
conté classes que suporten entrada/sortida. Les classes del paquet són principalment streams; no obstant, s'inclou una classe per a fitxers d'accés aleatori. Les classes principals del paquet són InputStream i OutputStream, les quals són classes abstractes base per a llegir de i escriure a streams de bytes, respectivament. Les classes relacionades Reader i Writer són classes abstractes base per a llegir de, i escriure a streams de caràcters, respectivament. El paquet també té algunes classes miscel·lànies per a suportar la interacció amb el Sistema de fitxers de l'ordinador.
Streams
[modifica]Les classes stream segueixen el patró decorador estenent la subclasse base per a afegir característiques a les classes stream. Les subclasses de les classes base stream són anomenades típicament per un dels següents atributs:
- L'origen/destí de les dades del stream
- el tipus de les dades escrits a/llegits del stream
- processament addicional o filtrat realitzant en les dades del stream
Les subclasses stream són anomenades utilitzant el patró naming XxxStreamType
on Xxx
és el nom que descriu la característica i StreamType
és un de InputStream
, OutputStream
, Reader
, o Writer
.
La següent taula mostra els orígens/destins suportats directament pel paquet java.io
:
Origen/Destí Nom tipus de Stream Entrada/Sortida Classes byte array ( byte[]
)ByteArray
byte entrada, sortida ByteArrayInputStream, ByteArrayOutputStream char array ( char[]
)CharArray
char entrada, sortida CharArrayReader, CharArrayWriter file File
byte, char entrada, sortida FileInputStream, FileOutputStream, FileReader, FileWriter string ( StringBuffer i StringBuilder
)String
char entrada, sortida StringReader, StringWriter thread ( Thread
)Piped
byte, char entrada, sortida PipedInputStream, PipedOutputStream, PipedReader, PipedWriter
Altres paquets de la llibreria estàndard subministren implementacions de stream per a altres destins, tals com el InputStream
retornat pel mètode java.net.Socket.getInputStream() o la classe Java EE javax.servlet.ServletOutputStream
.
El maneig i processament de tipus de dades, o filtrat de les dades stream es realitza a través de filtres stream. Les classes filter accepten altres objectes stream compatibles amb paràmetre per al constructor i decoren el stream contingut amb característiques addicionals. Els Filtres es creen estenent una de les classes base filter FilterInputStream, FilterOutputStream, FilterReader, o FilterWriter.
Les classes Reader
i Writer
són justament streams de bytes amb processament addicional realitzat al stream de dades per a convertir els bytes a caràcters. Utilitza la codificació de caràcters per defecte de la plataforma, la qual des de J2SE 5.0 es representa pel Charset retornat pel mètode estàtic java.nio.charset.Charset.defaultCharset(). La classe InputStreamReader converteix un InputStream
a un Reader
i la classe OutputStreamWriter converteix un OutputStream
a un Writer
. Ambdues classes tenen constructors que permeten la codificació de caràcters que sigui especificada. Si no s'especifica cap codificació, aleshores s'utilitza la codificació per defecte per a la plataforma.
La següent taula mostra els altres processos i filtres suportats directament pel paquet java.io
. Totes aquestes classes estenen la classe Filter
corresponent.
Operació Nom tipus de Stream Entrada/Sortida Classes buffering Buffered
byte, char entrada/sortida BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter "push back" el últim valor llegit Pushback
byte, char entrada PushbackInputStream, PushbackReader tipus primitius lectura/escriptura Data
byte entrada/sortida DataInputStream, DataOutputStream serialització d'objectes (lectura/escriptura d'objectes) Object
byte entrada/sortida ObjectInputStream, ObjectOutputStream
Accés aleatori
[modifica]La classe RandomAccessFile suporta lectura i escriptura d'accés aleatori de fitxers. La classe utilitza un punter a fitxer que representa un byte-offset (desplaçament) dins del fitxer per a la següent operació de lectura o escriptura. El punter a fitxer es mou implícitament llegint o escrivint, i explícitament cridant als mètodes seek(long) o skipBytes(int). La posició actual del punter de fitxer es retorna amb el mètode getFilePointer().
Sistema de Fitxers
[modifica]La classe File representa una ruta de fitxer o directori en un Sistema de fitxers. Els objectes File
suporten la creació, eliminació i canvi de nom de fitxers i directoris, i la manipulació d'atributs de fitxers tals com solament lectura i temps de l'última vegada modificat. Els objectes File
que representen directoris poden utilitzar-se per a obtindre una llista de tots els fitxers i directoris continguts.
La classe FileDescriptor és un descriptor de fitxers que representa un origen o destí de bytes. Normalment això és un fitxer, però pot també ser una consola o un socket de xarxa. Els objectes FileDescriptor
s'utilitzen per a crear streams de File
. S'obtenen des de streams File
i sockets java.net
i sockets de datagrama.
A J2SE 1.4, el paquet java.nio
(NIO o Nova E/S) va ser afegit per a suportar E/S mapejada a memòria, facilitant les operacions de E/S properes al maquinari subjacent amb millor rendiment. El paquet java.nio
proporciona suport per a diversos tipus de buffer. El subpaquet java.nio.charset proporciona suport per a diferents codificacions de caràcters per a dades de tipus caràcter. El subpaquet java.nio.channels proporciona suport per a canals, els quals representen connexions a entitats que són capaces de realitzar operacions de E/S, tals com fitxers i sockets. El paquet java.nio.channels
també proporciona suport per a bloqueig de granulació fina de fitxers.
El paquet java.math suporta aritmètica amb multiprecisió (inclou operacions aritmètiques modulars) i proporciona generadors de nombres primers amb multiprecisió utilitzats per a la generació de claus criptogràfiques. Les classes principals d'aquest paquet són:
- BigDecimal – proporciona nombres decimals amb signe de precisió arbitrària.
BigDecimal
dona a l'usuari el control sobre el comportament de redondeig a través deRoundingMode
. - BigInteger – proporciona enters de precisió arbitraria. Les Operacions amb
BigInteger
no produeixen overflow o pèrdua de precisió. A més de les operacions aritmètiques estàndards, proporciona aritmètica modular, càlcul de mínim comú múltiple, proves de nombres primers, generació de nombres primers, manipulació de bits, i altres operacions miscel·lànies. - MathContext – engloba les configuracions de context, les quals descriuen certes regles per a operadors numèrics.
- RoundingMode – una enumeració que proporciona vuit comportaments de redondeig.
El paquet java.net
suminista rutines especials de E/S per a xarxes, permetent peticions HTTP, i també altres transaccions comuns.
El paquet java.text
implementa rutines de parceig per a strings i, suporta diversos llenguatges llegibles per l'home, i parceig específic de la localització.
Les estructures de dades que agregen objectes amb el focus del paquet java.util
. Al paquet està inclòs l'API Collections, una jerarquia organitzada d'estructura de dades influenciada fortament per consideracions de patrons de disseny.
Paquets de propòsit especial
[modifica]Creat per a suportar la creació d'applets Java, el paquet java.applet
permet a les aplicacions ser descarregades sobre una xarxa i executar-se dins d'una sandbox. Les restriccions de seguretat són imposades fàcilment a la sandbox. Un desenvolupador, per exemple, pot aplicar una signatura digital a un applet, en conseqüència etiquetant-la com a segura. Fent-ho permet a l'usuari concedir permís a l'applet per a realitzar operacions restringides (tals com accedir al disc dur local), i elimina alguna o totes les restriccions de la sandbox. Els certificats digitals són emesos per agències com Thawte o Entrust.
Hi ha diverses classes per a desenvolupar i manipular beans incloses al paquet java.beans
, components reutilitzables definits per l'arquitectura JavaBeans. L'arquitectura proporciona mecanismes per a manipular propietats de components i llançar events quan aquestes propietats canvien.
La majoria de les APIs de java.beans
estan pensades per al seu ús en eines d'edició de beans, en les quals els beans poden combinar-se, personalitzar-se i manipular-se. Un tipus d'editor bean és el dissenyador GUI en un entorn de desenvolupament integrat (IDE).
El Abstract Window Toolkit conté rutines per a suportar operacions bàsiques GUI i utilitza finestres bàsiques des del sistema natiu subjacent. Moltes implementacions independents de l'API Java implementen tot excepte AWT, el qual no és utilitzat per la majoria de les aplicacions des del cantó del servidor. Aquest paquet també conté l'API dels gràfics Java 2D.
El paquet java.rmi
proporciona invocació a mètodes remots Java per a suportar crides a procediments remots entre dos aplicacions Java que s'executen en diferents JVM.
Suport per a seguretat, incloent-hi l'algoritme de resum de missatges, està inclòs al paquet java.security
.
Una implementació de l'API JDBC (utilitzada per a accedir a bases de dades SQL) s'agrupa al paquet java.sql
.
Subministra el suport per a la comunicació remota entre aplicacions, utilitzant el protocol RMI sobre IIOP. Aquest protocol combina característiques de RMI i CORBA.
Swing és una col·lecció de rutines basades en java.awt que proporcionen un grapat d'eines independents de la plataforma. javax.swing utilitza el dibuix en 2D per fer rutines per a components de la interfície d'usuari en lloc de dependre del suport de les IGU del sistema operatiu nadiu.
Aquest paquet conté el major nombre de classes (133 en total) del JDK 6. Aquest paquet, juntament amb java.awt conté també el major nombre d'enumeracions (7 en total) al JDK 6. Per tant, té tot el dret de ser un sistema molt ric, ofereix suport per a connectar extensions d'aspecte i aparença (PLAFs), de manera que els widgets de la IGU poden imitar els natius del sistema. Els patrons de disseny permeten el sistema la modificació del patró model-vista-controlador, el que fa de pont entre la funció i l'aparença. Una contradicció és que (a partir de J2SE 1.3) les fonts són elaborades pel sistema natiu subjacent, i no per Java, la qual cosa limita la portabilitat del text. Existeixen algunes solucions, com la utilització de fonts de mapes de bits. En general, els "dissenys" es fan servir per mantenir els elements dins d'una estètica coherent a través de les plataformes de la IGU.
Subministra el parser de HTML tolerant a errors que s'utilitza per a escriure diversos navegadors web i web bots.