# Java SE

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
### java.lang

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.

#### java.lang.ref

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.

### java.io

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

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íNomtipus de StreamEntrada/SortidaClasses byte array (byte)ByteArraybyteentrada, sortida ByteArrayInputStream, ByteArrayOutputStream char array (char)CharArraycharentrada, sortida CharArrayReader, CharArrayWriter fileFilebyte, charentrada, sortida FileInputStream, FileOutputStream, FileReader, FileWriter string (StringBuffer i StringBuilder)Stringcharentrada, sortida StringReader, StringWriter thread (Thread)Pipedbyte, charentrada, 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óNomtipus de StreamEntrada/SortidaClasses bufferingBufferedbyte, charentrada/sortida BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter "push back" el últim valor llegitPushbackbyte, charentrada PushbackInputStream, PushbackReader tipus primitius lectura/escripturaDatabyteentrada/sortida DataInputStream, DataOutputStream serialització d'objectes (lectura/escriptura d'objectes)Objectbyteentrada/sortida ObjectInputStream, ObjectOutputStream

#### Accés aleatori

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

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.

### java.nio

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.

### java.math

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 de RoundingMode.
* 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.

### java.net

El paquet java.net suminista rutines especials de E/S per a xarxes, permetent peticions HTTP, i també altres transaccions comuns.

### java.text

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ó.

### java.util

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
### java.applet

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.

### java.beans

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).

### java.awt

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.

### java.rmi

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.

### java.security

Suport per a seguretat, incloent-hi l'algoritme de resum de missatges, està inclòs al paquet java.security.

### java.sql

Una implementació de l'API JDBC (utilitzada per a accedir a bases de dades SQL) s'agrupa al paquet java.sql.

### javax.rmi

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.

### javax.swing

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.

### javax.swing.text.html.parser

Subministra el parser de HTML tolerant a errors que s'utilitza per a escriure diversos navegadors web i web bots.

## Vegeu també

* Java EE
* Java ME

## Enllaços externs

* Pàgina principal Java SE
* documentació de l'API de Java SE
* JSR 270 (Java SE 6)
* Open Source Java