Premessa

Portale di appartenenza: Programmazione orientata agli oggetti.

Cosa troverai in questa nota:

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:

Buona lettura! β˜οΈπŸ€“

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.

I file .class vengono eseguiti dal java launcher tool su un’istanza della Java Virtual Machine (JVM).

500x
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.

350
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 piattaforma Java Γ¨ 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.

È composta dalla Java Virtual Machine (JVM) e dalla Java Standard API.

La piattaforma Java Γ¨ divisa su piΓΉ livelli:

  • 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 Java Platform API Specification contiene l’elenco completo di tutto ciΓ² che ti puΓ² offrire la piattaforma Java SE.

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 classe HelloWorldApp e la definizione del metodo main.

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

Vediamo la sintassi dei commenit in Java.

Sintassi: commenti in Java

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 del
    commento 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 del
    commento 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

I commenti in riga possono anche essere posizionati sulla stessa riga di un’istruzione, ma solo dopo di essa perchΓ© altrimenti anche questa verrebbe ignorata dal compilatore:

Β«istruzioneΒ» // Β«contenuto del commentoΒ»

Per esempio, il seguente commento Γ¨ valido:

int x = 10; // Inizializza x con 10.

Non vale perΓ² il contrario, ossia porre l’istruzione dopo il commento, perchΓ© il compilatore la considererebbe parte del commento e la ignorerebbe:

// Inizializza x con 10. int x = 10;

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;

Non Γ¨ perΓ² valido il seguente commento, perchΓ© interrompe la parola chiave int:

in/* commento nel mezzo */t x = 10;

3.2 - Definizione della classe HelloWorldApp

I pezzi di codice evidenziati fanno parte della definizione della classe HelloWorldApp:

/**
 * 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 metodo main:

/**
 * 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 metodo println del campo out della classe System, che fa parte della libreria standard di Java, per stampare il messaggio Hello World!.

Fonti

Footnotes

  1. Se, come me, prima di questo momento non sapevi la definizione di libro bianco, ti rimando alla pagina di Wikipedia in cui viene data. Ora non hai piΓΉ scuse :P. ↩