# Introduzione a Java

Java è un linguaggio originariamente sviluppato dalla Sun Microsystems, attualmente dalla Oracle Corporation.
La sintassi del Java ricorda molto quella del C++, tuttavia i due linguaggi sono stati scritti con scopi diversi, e quindi risultano sensibilmente diversi tra di loro.
Imparare una lingua significa entrare in un'ottica diversa: non si deve pensare nella propria lingua madre e tradurre, ma pensare direttamente nella lingua in cui si parla o si scrive. Ciò vale per le lingue naturali, così come per i linguaggi di programmazione.
Pertanto, il lettore che si avvicina al Java avendo già programmato in C++ o in altro linguaggio, o avendo già qualche nozione di programmazione ad oggetti, cancelli la forma mentis che tale linguaggio gli ha impresso.

## Caratteristiche

Java è un linguaggio
* case sensitive
* strongly typed
* object oriented
* dotato di garbage collector
La specifica tecnica che definisce il linguaggio è aggiornata dalla Oracle (in precedenza dalla Sun) e consiste in un documento chiamato The Java Language Specification, o, abbreviato, JLS. Nel tempo, sono state realizzate tre edizioni di questo documento (a gennaio 2011, la più recente è la terza), che via via hanno aggiunto al linguaggio nuove regole sintattiche e semantiche.
La specifica viene scritta avendo sempre in mente la retrocompatibilità: tranne rare eccezioni, tutto il codice sorgente che era corretto con le vecchie versioni di Java deve risultare corretto anche con quella nuova e deve avere lo stesso significato.

## Schema di funzionamento

Per realizzare un programma Java, si segue questo modello:
* il programmatore scrive in linguaggio Java i file che costituiscono il codice sorgente del programma;
* uno strumento automatico, chiamato compilatore, li traduce dal Java in un altro linguaggio di programmazione;
* il programma (costituito dai file risultanti dalla compilazione) viene lanciato avviando un altro programma, che è stato installato a priori sull'elaboratore, e chiamato Java Virtual Machine. Alla virtual machine sono indicati i file compilati che dovrà eseguire e alcuni metadati che consentono la corretta esecuzione del programma.
Il codice eseguibile prodotto dalla compilazione (bytecode) è scritto in un linguaggio di programmazione che non è direttamente comprensibile dagli esseri umani. Questo linguaggio è definito da un documento chiamato The Java Virtual Machine Specification, il cui sviluppo viene mantenuto dalla Oracle. A gennaio 2011, la versione più recente della specifica è la seconda.
Per maggiori informazioni, si rimanda alle seguenti voci di Wikipedia:
* Codice sorgente
* Compilatore
* Java Virtual Machine

## Breve storia

Durante l’aprile del 1991, un gruppo di impiegati della SUN Microsystem, conosciuti come “Green Group” iniziarono a studiare la possibilità di creare una tecnologia in grado di integrare le allora attuali conoscenze nel campo del software con l’elettronica di consumo.
Avendo subito focalizzato il problema sulla necessità di avere un linguaggio indipendente dalla piattaforma (il software non doveva essere legato ad un particolare processore) il gruppo iniziò i lavori nel tentativo di creare un linguaggio che estendesse il C++. La prima versione del linguaggio fu chiamata Oak e, successivamente per motivi di royalty Java.
Attraverso una serie di eventi, quella che era la direzione originale del progetto subì vari cambiamenti ed il target fu spostato dall’elettronica di consumo al world wide web. Il 23 maggio del 1995 la SUN ha annunciato formalmente Java. Da quel momento in poi il linguaggio è stato adottato da tutti i maggiori “vendors” di software incluse IBM, Hewlett Packard e Microsoft.

## Versioni della piattaforma
### Standard edition

Questa è la versione standard della piattaforma, che serve per sviluppare applicazioni desktop, applicazioni web e applet.

### Enterprise edition

La versione base di Java (Java SE - Java 2 Standard Edition) è stata ampliata attraverso la piattaforma Java EE (Java Enterprise Edition), che propone una architettura basata su tecnologie aperte e portabili proponendo un modello in grado di accelerare il processo di implementazione di soluzioni “server-side” attraverso lo sviluppo di funzionalità nella forma di “Enterprise Java Beans” in grado di girare su qualsiasi application server compatibile con lo standard. Oltre a garantire tutte le caratteristiche di portabilità (Write Once Run Everywhere) del linguaggio Java, Java EE fornisce:
* Un modello di sviluppo semplificato per l’ “enterprise computing” - La piattaforma offre ai “vendors” di sistemi la capacità di fornire una soluzione che lega insieme molti tipi di middleware (connettività verso database, ambienti transazionale, servizi di naming ecc.) in un unico ambiente, riducendo tempi di sviluppo e costi necessari alla integrazioni di componenti software di varia natura.
* Una architettura altamente scalabile: la piattaforma fornisce la scalabilità necessaria allo sviluppo di soluzione in ambienti dove le applicazioni scalano da prototipo di lavoro ad architetture “24x7 enterprise wide”;
* Legacy Connectivity: la piattaforma consente l’integrabilità di soluzioni pre esistenti in ambienti legacy consentendo di non reinvestire in nuove soluzioni;
* Piattaforme Aperte: J2EE è uno standard aperto. La Sun in collaborazione con partner tecnologici garantisce ambienti aperti per specifiche e portabilità;
* Sicurezza: la piattaforma fornisce un modello di sicurezza in grado di proteggere dati in applicazioni Internet;

## Strumenti di sviluppo

Tra gli strumenti di sviluppo necessari per sviluppare applicativi in linguaggio Java c'è la Java Development Kit (JDK), che contiene sia l'ambiente di runtime che il compilatore del codice sorgente.