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.
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.
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.
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.
2.1 JDK, JVM e JRE
Java Virtual Machine
Esegue il bytecode Java.
Java Runtime Environment
Rappresenta l'ambiente necessario all'esecuzione.
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
javac compila; java avvia l'esecuzione. L'IDE non sostituisce questi strumenti: li orchestra.
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.
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.
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
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.
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().
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
Nel primo caso separiamo dichiarazione e assegnazione; nel secondo inizializziamo direttamente la variabile.
Preferite nomi che raccontino il significato del dato. numeroDipendenti è molto più leggibile di x in un programma reale.
5.2 Tipi primitivi
| Tipo | Esempio | Uso tipico |
|---|---|---|
| int | int quantita=12; | Interi comuni |
| long | long popolazione=60000000L; | Interi con intervallo più ampio |
| double | double prezzo=19.90; | Valori decimali |
| boolean | boolean attivo=true; | Vero/falso |
| char | char 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.
5.4 var
var permette l'inferenza del tipo per variabili locali. Non elimina la tipizzazione.
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
Attenzione alla divisione intera: 10 / 3 produce 3, mentre 10.0 / 3 produce un valore decimale.
Confronti e logica
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
La condizione produce un booleano; il blocco descrive ciò che il programma deve fare in quella situazione.
7.2 switch
7.3 for e while
Ripetizione controllata
Utile quando la struttura del conteggio è nota.
Ripetizione condizionata
Utile quando il numero di iterazioni dipende dalla condizione.
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:
- leggere il prezzo;
- verificare se supera 100;
- applicare lo sconto se necessario;
- visualizzare il risultato.
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
| Errore | Causa tipica | Come ragionare |
|---|---|---|
| Errore di compilazione | Sintassi o tipi non corretti | Leggere il messaggio del compilatore e la riga indicata. |
| Divisione intera | Operandi int | Controllare i tipi dell'espressione. |
| Condizione errata | Logica non tradotta correttamente | Riscrivere la condizione in italiano. |
| Ciclo infinito | Condizione sempre vera | Individuare la variabile che deve cambiare. |
| Nome poco significativo | Uso indiscriminato di x, y, a, b | Dare nomi che rappresentino il significato. |
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.
È semplice, ma contiene già input, elaborazione, regola di business e output. Nelle lezioni successive aggiungeremo classi, validazione, eccezioni, persistenza, test e logging.
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.
- Quali variabili servono?
- Quali tipi scegli?
- Quale struttura di controllo utilizzi?
- Come rappresenti la condizione?
- Quali casi di test proveresti?
La regola di business è separata dalla stampa. È una piccola abitudine progettuale che tornerà continuamente.
12. Riepilogo e concetti chiave
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.
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.

