7 min di lettura
Pubblicato il 14 Novembre 2026
GUIDE · Java e strumenti per lo sviluppo • UFS 04 • Lezione 01
✍ Autore: Prof Giagnotti

Java da zero: capire il linguaggio e costruire il primo progetto professionale

Prima di parlare di classi, ereditarietà e framework dobbiamo costruire una base solida. In questa prima lezione impariamo a leggere e scrivere un programma Java, comprendere variabili e tipi, utilizzare condizioni e cicli e, soprattutto, impostare correttamente l'ambiente di sviluppo che useremo per tutto il corso.

☕ Java JDK 17/21🛠 IntelliJ IDEA
OBIETTIVI DI APPRENDIMENTO
✓Comprendere il ruolo di Java, JDK, JVM e bytecode.
✓Configurare JDK 17/21 e IntelliJ IDEA per lo sviluppo.
✓Leggere e scrivere un semplice programma Java e comprenderne la struttura.
✓Utilizzare variabili, tipi primitivi, String, var e operatori.
✓Applicare if/else, switch, for e while a problemi concreti.
✓Interpretare gli errori del compilatore e adottare un primo metodo di debugging.
✓Preparare il progetto per il laboratorio e il successivo versionamento Git.

1. Perché iniziamo proprio da Java?

In un corso professionale di programmazione non voglio partire da una lista di comandi da memorizzare. Voglio partire dal modo di lavorare di uno sviluppatore. Java sarà il linguaggio con cui costruiremo progressivamente un piccolo processo di sviluppo: progettare, implementare, eseguire, verificare, correggere, testare e versionare.

Nelle prime lezioni costruiremo le fondamenta: sintassi, tipi, variabili, operatori, condizioni, cicli e metodi. Successivamente arriveranno OOP, eccezioni, Collections, I/O, Maven, Git, JUnit, Mockito, debugging, logging e concorrenza.

💬 Tip del docente

Non voglio che impariate Java come una lista di parole chiave. Voglio che impariate a ragionare sul codice. Se dimenticate una sintassi, la documentazione si consulta; se non sapete scomporre un problema, nessun manuale può farlo al posto vostro.

🎯 Domanda da porsi

Se dovessimo sviluppare un programma per calcolare lo stipendio netto di un dipendente, quali dati entrano? Quali regole applichiamo? Quale risultato vogliamo ottenere? Prima del codice viene sempre il problema.

2. Come viene eseguito Java?

Java è un linguaggio general purpose, fortemente tipizzato e orientato agli oggetti. Il modello di esecuzione è basato sulla Java Virtual Machine. Il codice sorgente viene compilato in bytecode, normalmente contenuto in file .class, che la JVM può eseguire.

.javasorgentejavaccompilatore.classbytecodeJVMruntime
Il percorso concettuale dal codice sorgente all'esecuzione.

2.1 JDK, JVM e JRE

JVM

Java Virtual Machine

Esegue il bytecode Java.

JRE

Java Runtime Environment

Rappresenta l'ambiente necessario all'esecuzione.

JDK

Java Development Kit

Fornisce runtime e strumenti per sviluppare, compilare e diagnosticare.

Per noi la regola pratica è semplice: si sviluppa con un JDK. IntelliJ utilizzerà quel JDK per compilare ed eseguire i progetti.

2.2 Compilazione ed esecuzione

TERMINALE
javac HelloWorld.java java HelloWorld

javac compila; java avvia l'esecuzione. L'IDE non sostituisce questi strumenti: li orchestra.

⚠ Errore comune

IntelliJ IDEA non è Java. È un ambiente di sviluppo. Il linguaggio è Java e il JDK fornisce gli strumenti necessari.

3. Preparare l'ambiente di sviluppo

Preparare correttamente l'ambiente è già una competenza professionale. Se il progetto usa il JDK sbagliato o il compilatore non è configurato, il problema va diagnosticato come qualsiasi altro problema tecnico.

3.1 JDK 17/21

Utilizzeremo una versione LTS, JDK 17 o JDK 21, secondo la configurazione concordata per il laboratorio.

TERMINALE
java -version javac -version

Impariamo fin da subito a verificare la versione invece di dare per scontato che sia quella corretta.

3.2 IntelliJ IDEA

Riconosciamo quattro aree: Project per la struttura dei file, Editor per il codice, Run per l'esecuzione e Terminal per lavorare con gli strumenti da riga di comando.

💬 Tip del docente

Non usate l'IDE come una scatola magica. Durante il corso vi mostrerò cosa c'è dietro i pulsanti, perché un buon sviluppatore deve capire il proprio ambiente e saper intervenire anche da terminale.

4. Il primo programma Java

Partiamo dal programma minimo. Non ci interessa ancora costruire qualcosa di complesso: ci interessa imparare a leggere la struttura.

4.1 Classe e metodo main

JAVA
public class Main {public static void main(String[] args) { System.out.println("Ciao, Java!"); } }

class Main definisce una classe. Il metodo main è il punto di ingresso convenzionale di una semplice applicazione. Nelle prossime lezioni capiremo molto meglio che cosa significano public, static e il tipo di ritorno.

📌 Definizione da ricordare

Una classe è una struttura che può contenere dati e comportamenti. Un metodo rappresenta un comportamento eseguibile.

4.2 System.out

Per il primo output useremo System.out.println().

JAVA
System.out.println("Benvenuti nel corso UFS 04");
⚠ Attenzione

println è utile per iniziare, ma non sarà il nostro strumento professionale di diagnosi. Più avanti useremo debugger e logging.

5. Variabili e tipi

Un programma lavora con informazioni. Le variabili permettono di associare nomi a valori e il tipo descrive quale genere di valore stiamo gestendo.

5.1 Dichiarazione e assegnazione

JAVA
int eta; eta = 20;int anni = 20;

Nel primo caso separiamo dichiarazione e assegnazione; nel secondo inizializziamo direttamente la variabile.

💬 Tip del docente

Preferite nomi che raccontino il significato del dato. numeroDipendenti è molto più leggibile di x in un programma reale.

5.2 Tipi primitivi

TipoEsempioUso tipico
intint quantita=12;Interi comuni
longlong popolazione=60000000L;Interi con intervallo più ampio
doubledouble prezzo=19.90;Valori decimali
booleanboolean attivo=true;Vero/falso
charchar iniziale='M';Singolo carattere

5.3 String

String è una classe, non un tipo primitivo. Rappresenta testo e sarà centrale quando entreremo nel mondo degli oggetti.

JAVA
char iniziale = 'M'; String nome = "Mario";

5.4 var

var permette l'inferenza del tipo per variabili locali. Non elimina la tipizzazione.

JAVA
var nome = "Mario"; var eta = 20; var prezzo = 19.90;
⚠ Errore comune

var non significa “tipo qualsiasi”. Il compilatore determina il tipo dall'inizializzazione e la variabile mantiene quel tipo.

6. Operatori ed espressioni

Gli operatori permettono di combinare valori, eseguire calcoli e costruire condizioni.

Operatori aritmetici

JAVA
int a = 10; int b = 3; int somma = a + b; int prodotto = a * b; int quoziente = a / b; int resto = a % b;

Attenzione alla divisione intera: 10 / 3 produce 3, mentre 10.0 / 3 produce un valore decimale.

Confronti e logica

JAVA
int eta = 20; boolean maggiorenne = eta >= 18; boolean valido = eta >= 18 && eta <= 65;
💬 Tip del docente

Quando un'espressione vi sorprende, controllate prima i tipi. Molti problemi apparentemente misteriosi diventano immediatamente comprensibili guardando i dati coinvolti.

7. Strutture di controllo

Un programma reale deve prendere decisioni e ripetere operazioni.

7.1 if / else

JAVA
int voto = 27;if (voto >= 18) { System.out.println("Esame superato"); } else { System.out.println("Esame non superato"); }

La condizione produce un booleano; il blocco descrive ciò che il programma deve fare in quella situazione.

7.2 switch

JAVA
int giorno = 2;switch (giorno) { case 1: System.out.println("Lunedì"); break; case 2: System.out.println("Martedì"); break; default: System.out.println("Valore non valido"); }

7.3 for e while

FOR

Ripetizione controllata

Utile quando la struttura del conteggio è nota.

WHILE

Ripetizione condizionata

Utile quando il numero di iterazioni dipende dalla condizione.

JAVA
for (int i = 0; i < 5; i++) { System.out.println("Iterazione: " + i); }
⚠ Errore comune

Per ogni ciclo chiedetevi: da dove parto, quando mi fermo, cosa cambia a ogni iterazione? Se non sapete rispondere, il rischio di un ciclo infinito è alto.

8. Pensare prima di scrivere

Immaginiamo: “calcolare il prezzo finale applicando il 20% di sconto se il prezzo supera 100 euro”. Prima del codice scriviamo la logica:

  1. leggere il prezzo;
  2. verificare se supera 100;
  3. applicare lo sconto se necessario;
  4. visualizzare il risultato.
JAVA
double prezzo = 150.0; double prezzoFinale;if (prezzo > 100) { prezzoFinale = prezzo * 0.80; } else { prezzoFinale = prezzo; }System.out.println("Prezzo finale: " + prezzoFinale);
💬 Frase del docente

Quando un esercizio sembra difficile, non chiedetevi subito “quale comando devo usare?”. Chiedetevi: quali decisioni deve prendere il programma?

9. Errori comuni del primo mese

ErroreCausa tipicaCome ragionare
Errore di compilazioneSintassi o tipi non correttiLeggere il messaggio del compilatore e la riga indicata.
Divisione interaOperandi intControllare i tipi dell'espressione.
Condizione errataLogica non tradotta correttamenteRiscrivere la condizione in italiano.
Ciclo infinitoCondizione sempre veraIndividuare la variabile che deve cambiare.
Nome poco significativoUso indiscriminato di x, y, a, bDare nomi che rappresentino il significato.
💬 Tip del docente

Non cancellate un errore senza averlo letto. Voglio vedere una domanda tecnica, non dieci tentativi casuali.

10. Caso d'uso professionale: gestione di un ordine

Immaginiamo una piccola azienda che vende componenti elettronici. Dobbiamo calcolare il totale di un ordine e applicare uno sconto se supera una certa soglia.

JAVA
int quantita = 12; double prezzoUnitario = 15.50; double totale = quantita * prezzoUnitario;if (totale >= 100) { totale = totale * 0.90; }System.out.println("Totale ordine: " + totale + " euro");

È semplice, ma contiene già input, elaborazione, regola di business e output. Nelle lezioni successive aggiungeremo classi, validazione, eccezioni, persistenza, test e logging.

🎯 Domanda professionale

Che cosa manca a questa soluzione per essere realmente utilizzabile? Pensate a input, errori, più prodotti, salvataggio dati, test, logging e organizzazione del codice.

11. Verifica ragionata

🔬 Prova di comprensione

Scenario: un'azienda riconosce un bonus se il dipendente ha almeno 12 mesi di anzianità e una valutazione almeno pari a 80.

  1. Quali variabili servono?
  2. Quali tipi scegli?
  3. Quale struttura di controllo utilizzi?
  4. Come rappresenti la condizione?
  5. Quali casi di test proveresti?
✅ Soluzione ragionata
JAVA
int mesiAnzianita = 18; int valutazione = 87;boolean bonus = mesiAnzianita >= 12 && valutazione >= 80;if (bonus) { System.out.println("Bonus riconosciuto"); } else { System.out.println("Bonus non riconosciuto"); }

La regola di business è separata dalla stampa. È una piccola abitudine progettuale che tornerà continuamente.

13. Conclusione e ponte verso il laboratorio

Abbiamo costruito le fondamenta: ambiente, esecuzione, programma minimo, variabili, tipi, operatori, condizioni e cicli. La parte pratica trasformerà questi concetti in codice che dovrete scrivere, eseguire, modificare e correggere autonomamente.

Il laboratorio sarà volutamente progressivo: prima la configurazione, poi esercizi brevi, quindi un piccolo problema integrato e infine alcuni errori intenzionali da diagnosticare.

💬 Frase del docente

Il primo programma non deve essere impressionante. Deve essere comprensibile. La complessità arriverà dopo; prima costruiamo metodo.

💻 Laboratorio della Lezione 01

Il laboratorio GitHub accompagnerà questa lezione con configurazione del JDK, primo progetto IntelliJ, esercizi su variabili e tipi, condizioni e cicli, oltre a una sezione dedicata agli errori intenzionali.

Laboratorio Lezione 01 →Primo progetto Java, variabili, condizioni e cicli

📚 Prossimo passo — Metodi, array e primi principi di progettazione

Nella prossima lezione inizieremo a suddividere i programmi in parti più piccole e riutilizzabili. Lavoreremo con metodi, parametri, valori di ritorno e array, iniziando a passare dal semplice “scrivere codice” al progettare una soluzione.

✦ Trasparenza AI: uso strumenti AI per bozze, schemi e immagini. Ogni contenuto lo revisiono, testo i comandi in laboratorio e lo riscrivo con la mia esperienza in classe prima di pubblicarlo. La responsabilità di quello che leggi è mia.
Mario Giagnotti
AUTORE
Mario Giagnotti
Ingegnere Elettronico e docente di Informatica.