Prerequisiti: per comprendere pienamente il contenuto di questa nota, oltre le conoscenze minime che do per scontato che tu sappia giΓ , ti consiglio di aver letto in precedenza queste altre note:
Se sei avvezzo al mondo della programmazione o, semplicemente, usi abbastanza frequentemente un computer, avrai certamente sentito nominare almeno una volta il termine Java.
Sebbene con il termine Java si intenda solitamente il linguaggio di programmazione con questo nome, in realtΓ puΓ² indicare anche la piattaforma strettamente collegata a esso.
1 - Introduzione a Java
1.1 - Java come linguaggio di programmazione
Definizione: Java (linguaggio)
Java Γ¨ un linguaggio di programmazione ad alto livello, orientato agli oggetti e a tipizzazione statica, sviluppato dalla Sun Microsystems.
Il linguaggio Java puΓ² essere descritto da questa serie di caratteristiche:
Semplice.
Orientato agli oggetti.
Distribuito.
Multithreaded.
Dinamico.
Neutrale rispetto alle architetture.
Portabile.
Ad alte prestazioni.
Robusto.
Sicuro.
Ognuna delle precedenti caratteristiche viene descritta nel The Java Language Environment, un libro bianco1 scritto da James Gosling e Henry McGilton.
Nel linguaggio Java, tutto il codice sorgente viene scritto su file di testo semplici con estensioni .java. Questi file sorgente vengono compilati in file .class dal compilatore javac. Un file .class non contiene codice nativo per il tuo processore, ma contiene il bytecode.
Definizione: bytecode
Il bytecode Γ¨ un formato intermedio di codice compilato che rappresenta le istruzioni di un programma scritto nel linguaggio Java, indipendente dalla piattaforma. Viene generato dal compilatore Java (javac) a partire dal codice sorgente nei file .java, e salvato in file .class.
Una panoramica sul processo di esecuzione e compilazione di un codice sorgente scritto in Java.
Dal momento che la JVM Γ¨ disponibile su diversi sistemi operativi, Γ¨ possibile eseguire lo stesso file .class su ognuno di essi (che sia Windows, macOS o Linux). Alcune virtual machine, come il Java SE HotSpot at a Glance, effettuano operazioni aggiuntive a runtime per rendere le applicazioni piΓΉ efficienti.
Attraverso la JVM, la stessa applicazione Γ¨ eseguibile su piattaforme diverse.
1.2 - Java come piattaforma
Definizione: piattaforma
Una piattaforma Γ¨ un ambiente hardware o software su cui un programma viene eseguito.
La maggior parte delle piattaforme possono essere descritte in realtΓ come una combinazione tra un sistema operativo e lβhardware che lo supporta. La piattaforma Java si differenzia dalla maggior parte delle altre piattaforme per il fatto di essere una piattaforma unicamente software totalmente indipendente dallβhardware su cui poggia, grazie allβastrazione fornita dalla Java Virtual Machine (JVM).
Definizione: Java (piattaforma)
La piattaformaJava Γ¨ un insieme di specifiche, strumenti, librerie e ambienti di runtime che permettono di compilare, distribuire ed eseguire applicazioni scritte in Java in modo portabile su diverse architetture.
Java SE (Standard Edition): per applicazioni desktop e di base.
Java EE o Jakarta EE (Enterprise Edition): per applicazioni enterprise, web e distribuite.
Java ME (Micro Edition): per dispositivi mobili o embedded.
JavaFX: per interfacce grafiche ricche (GUI).
Definizione: Java Virtual Machine (JVM)
La Java Virtual Machine (JVM) Γ¨ il componente della piattaforma Java responsabile per lβesecuzione dei programmi in formato bytecode.
Definizione: Java Standard API
La Java Standard API Γ¨ unβampia raccolta di componenti software predefiniti che offrono numerose funzionalitΓ utili. Fa parte della piattaforma Java ed Γ¨ organizzata in librerie di classi e interfacce correlate, conosciute come package.
La API e la JVM isolano il programma dallβhardware su cui viene eseguito.
Essendo indipendente dallβhardware, la piattaforma Java puΓ² risultare leggermente piΓΉ lenta rispetto al codice nativo ottimizzato per una determinata piattaforma hardware. Tuttavia, i progressi nelle tecnologie dei compilatori e delle macchine virtuali stanno portando le prestazioni a livelli vicini a quelli del codice nativo, senza compromettere la portabilitΓ .
2 - Storia
Il contributo piΓΉ importante dato finora dalla rivoluzione elettronica Γ¨ stato lo sviluppo dei personal computer. I microprocessori hanno avuto un profondo impatto sui dispositivi di elettronica di consumo intelligenti, inclusa la recente esplosione del cosiddetto βInternet delle coseβ. Rendendosene ben presto conto, la Sun Microsystems (azienda statunitense con sede nella Silicon Valley) nel 1991 finanziΓ² un progetto di ricerca interno guidato da James Gosling, uno dei dipendenti, che produsse un linguaggio orientato agli oggetti, simile al C++, che la Sun chiamΓ² Java. Con Java Γ¨ possibile scrivere programmi eseguibili su una vasta gamma di sistemi e dispositivi.
3 - βHello World!β in Java
Come ogni linguaggio di programmazione che si rispetti, per cominciare a capirci qualcosa della sintassi, vediamo il suo βHello World!β:
/** * The HelloWorldApp class implements an application that * simply prints "Hello World!" to standard output. */class HelloWorldApp { public static void main(String[] args) { System.out.println("Hello World!"); // Display the string. }}
Questa applicazione Γ¨ composta da tre componenti principali: i commenti, la definizione della classeHelloWorldApp e la definizione del metodomain.
3.1 - Commenti
I pezzi di codice evidenziati sono dei commenti:
/** * The HelloWorldApp class implements an application that * simply prints "Hello World!" to standard output. */class HelloWorldApp { public static void main(String[] args) { System.out.println("Hello World!"); // Display the string. }}
In Java, i commenti seguono la stessa sintassi dei commenti in C. Infatti, anchβessi possono essere di tre tipi:
Commenti in riga: sono introdotti da un doppio slash in avanti (//) e indicano al compilatore di ignorare tutto ciΓ² che segue in quella riga:
// Β«contenuto del commento in rigaΒ»
Commenti multi-riga: sono racchiusi dai delimitatori /* e */ e indicano al compilatore di ignorare tutto ciΓ² che Γ¨ compreso tra i due delimitatori:
/*Β«contenuto delcommento multi-rigaΒ»*/
Commenti di documentazione: sono racchiusi dai delimitatori /** e */ e indicano al compilatore di ignorare tutto ciΓ² che Γ¨ compreso tra i due delimitatori:
/**Β«contenuto delcommento di documentazioneΒ»*/
Questi commenti sono utilizzati per generare automaticamente documentazione HTML con lo strumento javadoc. Devono essere posizionati sopra classi, metodi o attributi.
Osservazione: commenti in riga sulla stessa riga di un'istruzione
Osservazione: commenti multi-sulla stessa riga di un'istruzione
I commenti multi-riga, cosΓ¬ come i commenti in riga, possono anchβessi essere posizionati sulla stessa riga di unβistruzione, anche nel bel mezzo di unβistruzione, basta che non interrompa una parola chiave:
Β«prima parte dell'istruzioneΒ» /* Β«contenuto del commentoΒ» */ Β«seconda parte dell'istruzioneΒ»
Per esempio, il seguente commento Γ¨ valido:
int /* commento nel mezzo */ x = /* commento anche qui */ 10;
I pezzi di codice evidenziati fanno parte della definizione della classeHelloWorldApp:
/** * The HelloWorldApp class implements an application that * simply prints "Hello World!" to standard output. */class HelloWorldApp { public static void main(String[] args) { System.out.println("Hello World!"); // Display the string. }}
Qua puoi trovare una descrizione dettagliata della sintassi da usare per definire una classe in Java. In questo caso, abbiamo definito una classe (pubblica) HelloWorldApp.
3.3 - Definizione del metodo main
I pezzi di codice evidenziati fanno parte della definizione del metodomain:
/** * The HelloWorldApp class implements an application that * simply prints "Hello World!" to standard output. */class HelloWorldApp { public static void main(String[] args) { System.out.println("Hello World!"); // Display the string. }}
Qua puoi trovare una descrizione dettagliata della sintassi da usare per definire un metodo in Java. In questo caso, abbiamo definito un metodo main che esegue unβunica istruzione: chiama il metodoprintln del campoout della classeSystem, che fa parte della libreria standard di Java, per stampare il messaggio Hello World!.
Fonti
π« Lezioni e slide della Prof. Bono Viviana del corso di Principi di Programmazione Orientata agli Oggetti (canale B), Corso di Laurea in Informatica presso lβUniversitΓ di Torino, A.A. 2024-25: