# Java Platform, Standard Edition

In informatica la Java Platform, Standard Edition è una piattaforma software ampiamente utilizzata nella programmazione in linguaggio Java per costruire e distribuire applicazioni portatili (di tipo Desktop Application) ad uso generale. Java SE consiste di una macchina virtuale (Java Virtual Machine), che deve essere usata per eseguire programmi Java, insieme ad una serie di librerie (o "pacchetti") o API necessari per consentire l'uso di file system, reti, interfacce grafiche e così via, all'interno di tali programmi.

## Descrizione

La Java SE era conosciuta come Java 2 Platform, Standard Edition o J2SE dalla versione 1.2 fino alla versione 1.5. La sigla "SE" viene utilizzata per distinguere la piattaforma di base della versione Enterprise Edition di Java EE e Java Micro Edition ME. Il "2" è stato originariamente destinato a sottolineare i grandi cambiamenti introdotti nella versione 1.2, ma è stato rimosso nella versione 1.6. La convenzione di denominazione è stata cambiata più volte nel corso della storia delle versioni Java. A partire da J2SE 1.4 (Merlin).
La piattaforma Java Enterprise Edition (Java EE) è una specifica correlata che comprende tutte le classi in Java SE, oltre ad un numero di classi che sono più utili per i programmi che girano su server di postazioni di lavoro.
La piattaforma Java Micro Edition (Java ME) è una specifica correlata che ha lo scopo di fornire una raccolta certificata di API per lo sviluppo software di piccoli dispositivi con risorse limitate, come i telefoni cellulari.
La Java Development Kit (JDK) e la Java Runtime Environment (JRE) sono i file effettivi che vengono scaricati e installati su un computer rispettivamente per sviluppare ed eseguire programmi Java.
La Java SE è stata organizzata in due parti fondamentali:
* Core Java
* Desktop Java
Core Java è la parte che contiene le API fondamentali del linguaggio di programmazione, mentre Desktop Java è utilizzata per creare GUI di applicazioni o Applet.

### Librerie
#### Le librerie standard

Le librerie standard mirano ad includere le necessità più comuni per il programmatore. Fra le più significative si possono citare
* la possibilità di costruire GUI (interfacce grafiche) con strumenti standard e non proprietari, utilizzando i package JavaFX;
* la possibilità di creare applicazioni multi-threaded, ovvero che svolgono in modo concorrente molteplici attività;
* il supporto per la riflessione, ovvero la capacità di un programma di agire sulla propria struttura e di utilizzare classi caricate dinamicamente dall'esterno.
Fra gli argomenti che depongono spesso a favore di Java nella scelta del linguaggio di implementazione di un progetto software moderno, inoltre, si deve certamente contare la vastità delle librerie standard, che in particolare contribuiscono a renderlo altamente integrabile con altre tecnologie. Alcuni esempi delle funzionalità incluse tra le librerie standard di Java sono:
* accesso ai database tramite JDBC e ai DBMS con driver ODBC tramite il bridge JDBC-ODBC;
* manipolazione documenti XML;
* dialogo con piattaforme CORBA;
* potenti strumenti per la programmazione lato server nel contesto Web;
* supporto nativo per gran parte dei protocolli della famiglia IP, vedi ad esempio il Socket Java;
* supporto per le applicazioni multimediali, streaming audio e video.
La vastità delle librerie standard è tale da renderne praticamente impossibile la padronanza "a memoria"; è dunque necessario avere a disposizione la documentazione delle API, disponibile in linea sul sito ufficiale o scaricabile sul computer sotto forma di archivio compresso (ad esempio, dalla pagina di archivio della Sun Microsystem dedicata a Java).

#### Estensioni

Oltre alle librerie standard, il programmatore può fare affidamento su estensioni e package opzionali, scaricabili liberamente e facoltativamente dal sito web della Oracle dedicato a Java.
Le estensioni comprendono:
* GeoTools Libreria per il trattamento di dati geografici
* Servlet
* EJB Enterprise JavaBeans
* JSP JavaServer Pages
* JSF Java Server Faces
* JMS Java Message Service
* JavaMail
* JNI Java Native Interface
* JNDI Java Naming and Directory Interface
* JDBC Java Database Connectivity
* Jiro Java Interface for Regular Objects
* JXTA sigla che sta per "juxtapose" (porre accanto)
* JMX Java Management Extensions
* Java 3D Java 3D API