Java è un linguaggio di programmazione di alto livello, basato su classi e orientato agli oggetti, progettato per avere il minor numero possibile di dipendenze di implementazione. Il linguaggio è noto per la sua portabilità, che consente agli sviluppatori di scrivere codice che può essere eseguito su qualsiasi dispositivo dotato di una Java Virtual Machine (JVM). Questa capacità di scrivere una volta e eseguire ovunque rende Java particolarmente adatto per applicazioni web, software aziendale e sviluppo di app Android. La sintassi di Java deriva da C e C++, con un forte accento sulla leggibilità e facilità d'uso.
Java è stato originariamente sviluppato da James Gosling e dal suo team presso Sun Microsystems all'inizio degli anni '90. Il linguaggio era destinato a essere una soluzione indipendente dalla piattaforma per la creazione di applicazioni su vari dispositivi. Inizialmente, si chiamava Oak, ma fu successivamente rinominato Java, ispirato al caffè Java. Il rilascio ufficiale di Java 1.0 avvenne nel maggio 1995, in concomitanza con l'ascesa del World Wide Web, che ha notevolmente alimentato la sua adozione.
Nel corso degli anni, Java si è evoluto attraverso più versioni, ognuna delle quali ha introdotto nuove funzionalità e miglioramenti. L'introduzione di Java 2 nel 1998 ha portato con sé la Java 2 Platform, che includeva l'API grafica Swing e il Framework delle Collezioni. Il passaggio a un modello di versioning nel 2004, a partire da Java 5, ha introdotto funzionalità significative del linguaggio come generics, annotazioni e il ciclo for migliorato.
Attualmente, Java è mantenuto da Oracle Corporation dopo l'acquisizione di Sun Microsystems nel 2010. La comunità Java è vivace, con numerosi framework, librerie e strumenti disponibili, come Spring, Hibernate e Maven. Lo sviluppo di Java continua con aggiornamenti regolari, l'ultimo dei quali è Java 17, che è una versione di Long-Term Support (LTS), garantendo stabilità per le imprese.
Java ha avuto una notevole influenza su altri linguaggi di programmazione, ispirando funzionalità in C#, Kotlin e Scala. La sua natura indipendente dalla piattaforma ha anche aperto la strada a varie applicazioni oltre il software tradizionale, inclusi i big data come Apache Hadoop e i servizi cloud.
Java è intrinsecamente orientato agli oggetti, il che significa che incoraggia l'organizzazione del codice in classi e oggetti. Questo rende più facile modellare entità del mondo reale.
class Animale {
void suono() {
System.out.println("Suono dell'animale");
}
}
class Cane extends Animale {
void suono() {
System.out.println("Abbaio");
}
}
Java impiega un sistema di controllo dei tipi forte, il che significa che i tipi delle variabili devono essere dichiarati, prevenendo molti errori di runtime.
int conteggio = 10;
String nome = "Java";
Java utilizza la garbage collection per gestire la memoria, recuperando automaticamente la memoria utilizzata da oggetti che non sono più referenziati.
Animale animale = new Animale(); // Memoria allocata
animale = null; // Memoria idonea per la garbage collection
Java fornisce un robusto meccanismo di gestione delle eccezioni attraverso blocchi try-catch, aiutando gli sviluppatori a gestire gli errori in modo elegante.
try {
int risultato = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Errore di divisione per zero!");
}
Java semplifica il multithreading, consentendo l'esecuzione concorrente di compiti con thread relativamente facili da gestire.
class MioThread extends Thread {
public void run() {
System.out.println("Il thread è in esecuzione.");
}
}
MioThread thread = new MioThread();
thread.start();
Java consente la creazione di classi interne anonime, consentendo un'implementazione rapida di interfacce o l'estensione di classi senza dichiarazione formale.
Runnable runnable = new Runnable() {
public void run() {
System.out.println("Classe interna anonima");
}
};
new Thread(runnable).start();
Java supporta i generics, consentendo agli sviluppatori di creare classi, interfacce e metodi con parametri di tipo, migliorando l'affidabilità del codice.
class Scatola<T> {
private T oggetto;
public void setOggetto(T oggetto) { this.oggetto = oggetto; }
public T getOggetto() { return oggetto; }
}
Introdotte in Java 8, le espressioni lambda forniscono un modo più chiaro per rappresentare istanze di interfacce a metodo singolo (interfacce funzionali).
List<String> nomi = Arrays.asList("Giovanni", "Giovanna", "Giacomo");
nomi.forEach(nome -> System.out.println(nome));
La Stream API di Java consente operazioni in stile funzionale su collezioni, semplificando e rendendo più efficienti l'elaborazione dei dati.
List<String> nomiFiltrati = nomi.stream()
.filter(nome -> nome.startsWith("G"))
.collect(Collectors.toList());
Java supporta le annotazioni, che forniscono metadati sul programma e possono influenzare il modo in cui il programma viene trattato dal compilatore o dal runtime.
@Override
public void mioMetodo() {
// Codice del metodo qui
}
Il JDK è il kit di sviluppo principale per Java, contenente gli strumenti necessari per sviluppare, compilare ed eseguire applicazioni Java. Include l'ambiente di runtime Java (JRE), librerie e strumenti di sviluppo.
Gli ambienti di sviluppo integrati (IDE) comuni per lo sviluppo Java includono:
I progetti vengono tipicamente costruiti utilizzando strumenti di build come Maven o Gradle, che automatizzano la gestione delle dipendenze e semplificano il processo di build. Un semplice comando di build in Gradle potrebbe apparire così:
gradle build
Java è ampiamente utilizzato in vari settori, tra cui:
Java è spesso confrontato con linguaggi come C#, C++, Python e JavaScript.
Il codice Java può essere tradotto in altri linguaggi, anche se la complessità può variare in base ai paradigmi del linguaggio di destinazione. Esistono strumenti come Jaunt e J2ObjC per assistere in questo processo, ma potrebbero non gestire ogni scenario. La chiave per una traduzione di successo risiede nella comprensione dei costrutti sia di Java che del linguaggio di destinazione, in particolare in aree come la gestione della memoria e i sistemi di tipi.