- Configurare e verificare l'ambiente di sviluppo Java tramite terminale.
- Scrivere un programma Java sintatticamente corretto rispettando le convenzioni sui nomi.
- Compilare uno o più file sorgente in bytecode utilizzando il comando javac.
- Eseguire l'applicazione compilata attraverso la Java Virtual Machine identificando il punto di ingresso.
- Far cooperare più classi distribuite su file diversi all'interno della stessa directory.
- Identificare e risolvere i principali errori di compilazione, runtime e assenza del metodo main.
LABORATORIO AVANZATO
Gestione di più file nella stessa cartella
In questa attività pratica vedremo come Java permetta di far cooperare più classi distribuite su file diversi e come compilarle in un unico blocco dal terminale.
1 Scenario: La simulazione del Termostato
Nei progetti reali, il codice non viene mai scritto in un unico file gigante. Creeremo una classe chiamata Termostato che definisce l'oggetto e le sue proprietà, e una classe separata chiamata ConfiguraAmbiente che conterrà il metodo main per avviare la simulazione.
I due file che stiamo per creare devono essere salvati nella stessa identica cartella di lavoro (es. sul Desktop dentro una nuova cartella chiamata
JavaMultiFile).
Struttura dei file nella cartella di progetto:
├──
Termostato.java (Classe di supporto)└──
ConfiguraAmbiente.java (Classe driver principale)
2 Scrittura del primo file: Termostato.java (Senza Main)
Questo file serve solo a definire come funziona il nostro termostato. Noterai che non contiene il metodo main, quindi non può essere eseguito da solo.
// File: Termostato.java
public class Termostato {
// Proprietà della classe (variabili)
int temperaturaCorrente = 24;
int temperaturaTarget = 20;
}
3 Scrittura del secondo file: ConfiguraAmbiente.java (Con il Main)
Questo è il nostro file principale. Contiene la "chiave di accensione" main ed è incaricato di richiamare e utilizzare la classe Termostato definita nel file precedente.
// File: ConfiguraAmbiente.java
public class ConfiguraAmbiente {
public static void main(String[] args) {
// Creiamo una copia (istanza) del Termostato definito nell'altro file
Termostato mioTermostato = new Termostato();
System.out.println("--- MONITORAGGIO CLIMATIZZAZIONE ---");
System.out.println("Temperatura rilevata in stanza: " + mioTermostato.temperaturaCorrente + " gradi.");
System.out.println("Temperatura impostata (Target): " + mioTermostato.temperaturaTarget + " gradi.");
// Calcolo dello scarto termico
int scarto = mioTermostato.temperaturaCorrente - mioTermostato.temperaturaTarget;
System.out.println("Scarto termico rilevato: " + scarto + " gradi.");
}
}
In questa riga applichiamo uno dei pilastri fondamentali della programmazione a oggetti (OOP):
Termostato mioTermostato = new Termostato();- Classe (Il Tipo):
Termostatoè la Classe. Rappresenta la definizione astratta, il modello che descrive quali dati e quali caratteristiche avrà quel componente. - Oggetto (L'Istanza):
mioTermostatoè l'Oggetto. È la variabile concreta creata in memoria RAM attraverso l'operatorenew. Questa operazione si chiama formalmente Istanziazione. - Operatore di Accesso (
.): Una volta istanziato l'oggetto, utilizziamo il punto (es.mioTermostato.temperaturaCorrente) per accedere ai suoi membri (attributi o metodi).
4 Compilazione cumulativa da Terminale
Dal terminale, posizionati all'interno della cartella dove hai salvato entrambi i file. Per compilarli tutti in un colpo solo, puoi sfruttare il carattere speciale asterisco (*), che indica a Java di prendere tutti i file con estensione .java:
javac *.java
Se non ci sono errori, nella cartella compariranno due nuovi file compilati in bytecode:
Termostato.classConfiguraAmbiente.class
Struttura della cartella dopo la compilazione:
├──
ConfiguraAmbiente.java├──
ConfiguraAmbiente.class (Bytecode generato)├──
Termostato.java└──
Termostato.class (Bytecode generato)
5 Esecuzione del progetto
Per avviare l'applicazione dobbiamo lanciare **unicamente** la classe che possiede l'interruttore di partenza (il metodo main), ovvero ConfiguraAmbiente:
java ConfiguraAmbiente
--- MONITORAGGIO CLIMATIZZAZIONE ---
Temperatura rilevata in stanza: 24 gradi.
Temperatura impostata (Target): 20 gradi.
Scarto termico rilevato: 4 gradi.
Se provi ad eseguire il comando
java Termostato, la JVM si bloccherà immediatamente restituendo l'errore: "Main method not found in class Termostato". Ricorda: si esegue sempre e solo la classe che contiene il punto di ingresso!
Quiz di Verifica: Architetture Multi-File
In sintesi
Argomenti: concetti principali, riepilogo, competenze
- Il JDK 21 offre gli strumenti
javac(compilatore) ejava(esecutore) per il ciclo di sviluppo. - La firma
public static void main(String[] args)è l'unico punto di ingresso valido per l'avvio di un'applicazione. - In un progetto multi-file, ogni classe risiede nel proprio file
.java, ma solo una classe driver conterrà il metodomain. - La compilazione con
javac *.javagenera un file.class(bytecode) per ciascuna classe presente nella cartella. - L'esecuzione avviene lanciando esclusivamente il nome della classe driver (senza estensione), lasciando che la JVM carichi i componenti secondari.
- A organizzare lo spazio di lavoro per progetti a singolo file e multi-file.
- A strutturare una classe driver (con main) e classi di supporto senza metodo principale.
- A utilizzare l'operatore
newper istanziare e far comunicare classi diverse. - A effettuare una compilazione cumulativa da terminale tramite l'operatore wildcard
*.java. - A gestire i flussi operativi e i messaggi d'errore della JVM su Windows, macOS e Linux.