Utente:LoStrangolatore/corsojava/lez02

Da Wikiversità, l'apprendimento libero.

Hello, world![modifica]

Cominciamo con un semplice programma che scrive sulla console il testo "Hello, world!". Più giù analizzeremo cosa è successo.

Dobbiamo seguire i tre passi indicati qui.

Passo 1: Apriamo il file HelloWorld.java e scriviamoci dentro il testo che segue.

public class HelloWorld {
    public static void main(String[] args) {
        
        System.out.println("Hello, world!");
        
    }
}

Passo 2: Salviamo in un file chiamato HelloWorld.java e chiudiamo, dopodiché andiamo sulla riga di comando e digitiamo:

javac -cp . HelloWorld.java

Aspettiamo qualche secondo, dopodiché vedremo riapparire il prompt dei comandi. Notiamo che nella cartella c'è un nuovo file, HelloWorld.class. TODO: Affiancare una immagine che mostri la riga di comando e l'esecuzione di javac.

Passo 3: Ora scriviamo su terminale

java -cp . HelloWorld

e osserviamo il risultato. TODO: Affiancare una immagine che mostri il risultato.

Cosa è successo[modifica]

Passo 1. Abbiamo scritto e salvato il file HelloWorld.java, cioè l'unico file sorgente che compone questo piccolo programma.
Passo 2. Abbiamo lanciato il compilatore, che ha generato una versione equivalente del file HelloWorld.java, scritta in quel linguaggio a basso livello che è specifico della macchina virtuale Java. Questo linguaggio non è stato progettato per essere letto direttamente dagli esseri umani: infatti, se apriamo il file HelloWorld.class con un editor di testo come il Blocco note, vedremo una sequenza di simboli che, in apparenza, non hanno senso.
Passo 3. Abbiamo lanciato la macchina virtuale, passandole come parametro il nome HelloWorld (senza l'estensione). Essa aggiunge automaticamente l'estensione .class, quindi cerca il file HelloWorld.class, lo trova, ne legge il contenuto, ne crea una rappresentazione interna che sia eseguibile, e la esegue. Quando le istruzioni del programma sono finite, la macchina virtuale termina e restituisce il controllo al terminale.

Dal sorgente all'esecuzione[modifica]

Il comportamento del programma è tutto codificato nel file HelloWorld.java. Le istruzioni che compongono il corpo del programma si trovano tra la riga

public static void main(String[] args) {

e la parentesi graffa chiusa al rigo 6. Queste due righe delimitano le istruzioni che saranno eseguite quando il programma sarà lanciato tramite la macchina virtuale.
Questo schema dà il seguente messaggio al compilatore: Il programma HelloWorld contiene una successione di istruzioni eseguibili, che nel complesso vanno etichettate con il nome main.

Il compilatore scrive nel file .class che il programma HelloWorld contiene una sequenza di istruzioni chiamata main. In gergo, una sequenza di istruzioni eseguibili dotata di un nome si chiama metodo. Quindi, anche main è un metodo.

Quando avviamo la macchina virtuale, essa legge il file .class, si aspetta che sia un programma eseguibile, e quindi cerca un metodo con il nome main, perché le specifiche della macchina virtuale stabiliscono convenzionalmente che tutti i programmi eseguibili Java devono essere fatti in questo modo.
Se il programma non rispetta queste convenzioni, la VM si rifiuta di eseguirlo. Ad esempio, se per un errore di battitura diamo al metodo un nome diverso, come mainm, possiamo compilare correttamente il file, ma al momento di lanciare la macchina virtuale otterremo un errore sulla console.

Il sorgente[modifica]

System.out.println

Questo è il meccanismo standard utilizzato per scrivere qualcosa su terminale. Deve essere seguito dalle parentesi tonde, all'interno delle quali bisogna inserire ciò che si vuole che appaia a video. In questo caso abbiamo deciso di scrivere del testo libero come "Hello, world!", ma avremmo potuto anche scrivere numeri o valori di altro tipo, come nel seguente programma:

public class HelloWorld2 {
    public static void main(String[] args) {
        
        System.out.println("Quanto fa tre più cinque?");
        System.out.println(8);
        System.out.println("Ovvio!");
        
    }
}

Notare che le parentesi vanno sempre in coppia: per ogni parentesi aperta deve sempre esserci una parentesi chiusa.

Esercizio: compila e lancia questo programma. La soluzione è qui.


Le stringhe

Il testo libero si chiama in gergo stringa.

Esistono diversi modi per creare una stringa; finora ne abbiamo usato solo uno: scrivere il testo, delimitandolo con le virgolette. Le virgolette sono un "paletto" che dice al compilatore: Queste non sono istruzioni Java, ma testo libero, quindi non lamentarti se questo testo non segue la sintassi Java. Anche le virgolette vanno in coppia. Infatti, se ce le dimentichiamo, il programma non compila più, perché il compilatore cerca di interpretare le parole Hello, world! come istruzioni Java.

Andiamo avanti[modifica]

public class Calcoli {
    public static void main(String[] args) {
        
        System.out.println("Un paio di calcoli:");
        System.out.println();
        System.out.print("Tre più cinque fa ");
        System.out.println(8);
        System.out.print("Cassa più forte fa ");
        System.out.print("cassa");
        System.out.println("forte");
        
    }
}

Come prima, salviamo su un file Calcoli.java; scriviamo su terminale javac -cp . Calcoli.java; aspettiamo che il compilatore javac termini, e avviamo la macchina virtuale scrivendo su terminale java -cp . Calcoli.

Il lettore attento avrà notato che è stato scritto System.out.println() senza argomenti. Questo è possibile perché esistono diverse versioni di println e ognuna è specializzata per un tipo di dati diverso. Finora ne abbiamo usato solo una, ovvero quella che prende in ingresso una stringa; ma ne esistono altre; ad esempio ne esiste una che non prende in ingresso nulla, e scrive su terminale una semplice riga vuota; un'altra prende in ingresso numeri interi; e così via.

In questo secondo esempio abbiamo usato anche un secondo meccanismo per la scrittura su terminale: alcune volte è scritto print anziché println. La differenza è questa: println scrive il contenuto e ritorna a capo, mentre print non lo fa.

Esercizio: modifica i file HelloWorld.java e Calcoli.java, sostituendo print con println e viceversa. Compila ciascuno dei due file, avvia ciascuno dei due programmi, e osserva il risultato.

Soluzioni degli esercizi[modifica]

Compilare e lanciare HelloWorld2

Passo 1:     Salviamo il codice in un file chiamato HelloWorld2.java

Passo 2:     javac -cp . HelloWorld2.java

Passo 3:     java -cp . HelloWorld2