HTML CSS JAVASCRIPT SQL MYSQL PYTHON JAVA PHP C C++ C# PACKET TRACER CYBERSECURITY REACTTYPESCRIPTNODE.JSGIT & GITHUBDATA SCIENCEBOOTSTRAPGOKOTLINJQUERYDJANGOVUEANGULAR MONGODB POSTGRESQL SASS NUMPY PANDAS SCIPY DSA RUST SWIFT BASHXMLW3.CSSANGULARJSAIAWSPROGRAMMAZIONEEXCEL WORD POWERPOINT
Corso gratuito

Corso di Java in italiano

Il tutorial completo per imparare Java da zero: dalla sintassi di base alla programmazione a oggetti, con esempi di codice spiegati passo passo.

Introduzione a Java

Java è un linguaggio di programmazione orientato agli oggetti, creato da Sun Microsystems nel 1995 e oggi mantenuto da Oracle. È uno dei linguaggi più usati al mondo per applicazioni aziendali, app Android, sistemi bancari e software di grandi dimensioni.

Il suo motto è “Write Once, Run Anywhere”: il codice Java viene compilato in bytecode ed eseguito dalla JVM (Java Virtual Machine), perciò gira su qualsiasi sistema operativo senza modifiche. Java è fortemente tipizzato e segue rigorosamente il paradigma a oggetti.

📌 Java non si esegue nel browser: in questo corso gli esempi si leggono e si modificano con la sintassi colorata. Per eseguirli ti serve il JDK installato sul tuo computer (vedi “Installazione”).
Esempio

Installare Java (Get Started)

Per programmare in Java ti serve il JDK (Java Development Kit), che include il compilatore javac e la JVM. Si scarica da oracle.com o, in versione open source, da adoptium.net. Come editor si usano IntelliJ IDEA, Eclipse o VS Code.

Compilare ed eseguire

Un file Java si salva con lo stesso nome della classe pubblica (es. Main.java). Dal terminale:

Terminale

Sintassi e primo programma

Ogni programma Java è organizzato in classi. L'esecuzione parte dal metodo speciale main. Le istruzioni terminano con il punto e virgola ; e i blocchi sono racchiusi tra parentesi graffe { }.

Esempio

Output: System.out.println

Per stampare a schermo si usa System.out.println() (stampa e va a capo) oppure System.out.print() (senza andare a capo).

Esempio

I commenti

I commenti spiegano il codice e non vengono eseguiti: su una riga con //, su più righe con /* ... */.

Esempio

Le variabili

In Java ogni variabile deve essere dichiarata con il suo tipo (tipizzazione statica). La sintassi è tipo nome = valore;. Con final si crea una costante non modificabile.

Esempio

I tipi di dato

Java distingue i tipi primitivi (valori semplici) dai tipi riferimento (oggetti come String, array).

TipoDescrizioneEsempio
intIntero42
doubleDecimale3.14
charSingolo carattere'A'
booleanVero/falsotrue
StringTesto (oggetto)"ciao"
Esempio

Il casting (conversione di tipo)

Il casting converte un tipo in un altro. Quello widening (es. int → double) è automatico; quello narrowing (es. double → int) va indicato esplicitamente fra parentesi.

Esempio

Gli operatori

Java offre operatori aritmetici (+ - * / %), di confronto (== != > <), logici (&&, ||, !) e di assegnazione (= += -=).

Esempio

Le stringhe

La classe String rappresenta il testo e offre molti metodi: length(), toUpperCase(), substring(), indexOf(). Le stringhe si concatenano con +.

Esempio

La classe Math

La classe Math fornisce funzioni matematiche: Math.sqrt(), Math.pow(), Math.max(), Math.random() e la costante Math.PI.

Esempio

L'input dell'utente

Per leggere dati dalla tastiera si usa la classe Scanner del package java.util.

Esempio

Le condizioni: if, else if, else

Le istruzioni condizionali eseguono codice in base a una condizione booleana.

Esempio

Il costrutto switch

Lo switch confronta una variabile con più valori (case). Usa break per uscire e default per il caso generale.

Esempio

Il ciclo while

Il while ripete un blocco finché la condizione è vera. La variante do...while esegue almeno una volta.

Esempio

Il ciclo for

Il for è ideale quando conosci il numero di ripetizioni. Esiste anche il for-each per scorrere array e collezioni.

Esempio

Gli array

Un array contiene più valori dello stesso tipo, con dimensione fissa. Si accede con l'indice (parte da 0) e si ottiene la lunghezza con .length.

Esempio

I metodi

Un metodo è un blocco di codice riutilizzabile con un nome. void indica che non restituisce nulla; static permette di chiamarlo senza creare un oggetto.

Esempio

Parametri e valore di ritorno

Un metodo può ricevere parametri e restituire un valore con return, indicandone il tipo al posto di void.

Esempio

Programmazione a oggetti (OOP)

Java è un linguaggio profondamente orientato agli oggetti. Tutto ruota attorno a classi (i modelli) e oggetti (le istanze). I pilastri sono incapsulamento, ereditarietà, polimorfismo e astrazione: permettono di scrivere software grande, ordinato e riutilizzabile.

📦 Una classe è lo “stampo”, gli oggetti sono i “biscotti” creati con quello stampo.

Classi e oggetti

Una classe definisce attributi (dati) e metodi (comportamenti). Con new si crea un oggetto.

Esempio

Gli attributi

Gli attributi (o campi) sono le variabili che descrivono lo stato di un oggetto. Ogni oggetto ha la propria copia.

Esempio

I metodi di classe

I metodi definiscono il comportamento degli oggetti e possono usare i loro attributi.

Esempio

I costruttori

Un costruttore è un metodo speciale (stesso nome della classe) chiamato automaticamente con new per inizializzare l'oggetto. La parola chiave this indica l'oggetto corrente.

Esempio

I modificatori d'accesso

I modificatori d'accesso stabiliscono la visibilità di attributi e metodi: public (ovunque), private (solo nella classe), protected (classe e sottoclassi), o di default (stesso package).

ModificatoreVisibilità
publicDa qualsiasi classe
privateSolo dentro la classe
protectedClasse, package e sottoclassi

L'incapsulamento

L'incapsulamento protegge i dati rendendo gli attributi private e fornendo metodi pubblici getter e setter per leggerli e modificarli in modo controllato.

Esempio

L'ereditarietà

Con extends una classe (figlia) eredita attributi e metodi da un'altra (genitore), riutilizzando il codice. super richiama il genitore.

Esempio

Il polimorfismo

Il polimorfismo permette di usare lo stesso metodo con comportamenti diversi a seconda dell'oggetto. Con l'override una sottoclasse ridefinisce un metodo del genitore.

Esempio

Le interfacce

Un'interfaccia definisce un “contratto” di metodi che le classi devono implementare con implements. È il modo di Java per l'astrazione e per ottenere una forma di ereditarietà multipla.

Esempio

ArrayList e collezioni

L'ArrayList è una lista dinamica (a dimensione variabile), parte del Collections Framework. A differenza degli array può crescere e ridursi.

Esempio

La gestione delle eccezioni

Le eccezioni sono errori che si verificano durante l'esecuzione. Si gestiscono con try ... catch (e l'opzionale finally) per evitare che il programma vada in crash.

Esempio

Booleans in Java

Un tipo booleano (boolean) può assumere solo due valori: true o false. È il tipo restituito da tutte le espressioni di confronto.

Esempio

Gli operatori logici: && (AND), || (OR), ! (NOT). Sono fondamentali per condizioni composte nei blocchi if, while e for.

Break e Continue

break interrompe immediatamente il ciclo (o lo switch). continue salta l'iterazione corrente e passa alla successiva.

Break
Continue

Overloading dei metodi

Java permette di definire più metodi con lo stesso nome ma parametri diversi (tipo o numero). Questo si chiama method overloading.

Esempio
💡 L'overloading migliora la leggibilità del codice: stesso nome semantico, comportamento adattato al tipo.

Scope delle variabili

Lo scope (ambito) di una variabile determina dove può essere usata. In Java le variabili dichiarate dentro un blocco { } esistono solo all'interno di quel blocco.

Esempio
  • Variabili locali: esistono solo nel metodo/blocco in cui sono dichiarate
  • Attributi di classe: visibili in tutti i metodi della classe
  • Variabili statiche: condivise tra tutte le istanze della classe

Ricorsione

Un metodo ricorsivo è un metodo che chiama se stesso. Ogni chiamata ricorsiva deve avvicinarsi a un caso base che interrompe la ricorsione.

Fattoriale ricorsivo
⚠️ Senza caso base la ricorsione è infinita e genera StackOverflowError. Usare la ricorsione con attenzione per dati molto grandi.

Parola chiave this

this si riferisce all'istanza corrente della classe. Si usa per disambiguare attributi da parametri con lo stesso nome, o per chiamare un altro costruttore.

Esempio

Package e API Java

Un package è un raggruppamento di classi correlate, simile a una cartella. Java include una ricca libreria standard (Java API) organizzata in package.

Importare package
PackageContenuto
java.langString, Math, Integer, System (importato automaticamente)
java.utilArrayList, HashMap, Scanner, Date, Collections
java.ioFile, InputStream, OutputStream, Reader, Writer
java.timeLocalDate, LocalTime, LocalDateTime
java.netURL, HttpURLConnection, Socket

Parola chiave super

super fa riferimento alla classe padre (superclasse). Si usa per chiamare il costruttore o i metodi della superclasse.

Esempio

Classi interne (Inner Classes)

Una classe interna è una classe definita all'interno di un'altra classe. Ha accesso agli attributi privati della classe esterna.

Esempio

Astrazione

L'astrazione nasconde i dettagli implementativi ed espone solo le funzionalità essenziali. Si realizza con classi astratte (abstract) e interfacce.

Classe astratta
📌 Una classe astratta non può essere istanziata direttamente. Deve essere estesa da una classe concreta che implementa tutti i metodi astratti.

Classi anonime

Una classe anonima è una classe senza nome, definita e istanziata in un'unica espressione. Utile per implementare interfacce o classi astratte al volo.

Esempio

Enum

Un enum (enumerazione) è un tipo speciale con un insieme fisso di costanti. Si usa per valori predefiniti come giorni, stati, direzioni.

Esempio

Date e ora in Java

Da Java 8 si usa il package java.time per gestire date e orari in modo sicuro e immutabile.

Esempio
ClasseDescrizione
LocalDateSolo data (anno, mese, giorno)
LocalTimeSolo ora (ore, minuti, secondi)
LocalDateTimeData + ora
DateTimeFormatterFormatta date come stringa
PeriodDifferenza tra date

Debugging in Java

Il debugging è il processo di individuazione e correzione degli errori. Java distingue tre tipi di errori: syntax errors (errori di sintassi), runtime errors (errori a runtime) e logic errors (errori logici).

  • Syntax error: rilevato dal compilatore (manca ;, parentesi, ecc.)
  • Runtime error: genera un'eccezione durante l'esecuzione (NullPointerException, ArrayIndexOutOfBoundsException)
  • Logic error: il programma gira ma produce risultati sbagliati

Strumenti di debug: System.out.println() per stampe di controllo, IDE debugger (IntelliJ IDEA, Eclipse, VS Code) per breakpoint, watch variables, step-by-step execution.

💡 Usa il debugger dell'IDE: posiziona un breakpoint su una riga, avvia in modalità debug e osserva i valori delle variabili in tempo reale.

Eccezioni multiple (multi-catch)

Java permette di catturare più tipi di eccezione nello stesso blocco catch usando |, oppure con più blocchi catch consecutivi.

Esempio

Le eccezioni principali di Java:

EccezioneCausa
NullPointerExceptionUso di variabile non inizializzata
ArrayIndexOutOfBoundsExceptionAccesso oltre i limiti dell'array
NumberFormatExceptionConversione stringa non numerica
ClassCastExceptionCast tra tipi incompatibili
IllegalArgumentExceptionArgomento non valido passato a un metodo

Try-with-resources

Il try-with-resources (Java 7+) garantisce che le risorse (file, connessioni DB, stream) vengano chiuse automaticamente al termine del blocco, anche in caso di eccezione.

Esempio
💡 Funziona con qualsiasi classe che implementa AutoCloseable: File, Stream, Connection JDBC, ecc.

Gestione file in Java

La classe File del package java.io permette di lavorare con file e directory: creare, leggere, scrivere, eliminare file e navigare il filesystem.

Info su un file

Creare un file

Il metodo createNewFile() crea un nuovo file vuoto. Restituisce true se il file è stato creato, false se esiste già.

Esempio

Scrivere su file

FileWriter scrive testo in un file. Con true come secondo parametro, aggiunge al file esistente (append mode).

Esempio

Leggere un file

Scanner con File permette di leggere riga per riga un file di testo in modo semplice.

Esempio

Eliminare un file

Il metodo delete() della classe File elimina un file. Restituisce true in caso di successo.

Esempio

FileInputStream e FileOutputStream

Per leggere e scrivere file binari (immagini, PDF, audio) si usano FileInputStream e FileOutputStream che operano sui byte.

FileInputStream

BufferedReader e BufferedWriter

BufferedReader e BufferedWriter aggiungono un buffer di memoria che riduce gli accessi al disco, rendendo la lettura/scrittura di file di testo molto più efficiente.

Esempio

Collections Framework

Il Java Collections Framework è un insieme di interfacce e classi per gestire gruppi di oggetti in modo efficiente. Le interfacce principali sono List, Set e Map.

InterfacciaImplementazioni principaliCaratteristica
ListArrayList, LinkedListOrdinata, ammette duplicati
SetHashSet, TreeSet, LinkedHashSetNon ammette duplicati
MapHashMap, TreeMap, LinkedHashMapCoppie chiave-valore
QueueLinkedList, PriorityQueueFIFO (coda)
DequeArrayDequeCoda a doppia entrata
📌 Importa sempre da java.util.*. Preferisci programmare con l'interfaccia (List<String> lista = new ArrayList<>()) per maggiore flessibilità.

LinkedList

LinkedList implementa sia List che Deque. Ogni elemento è un nodo collegato al precedente e al successivo. Inserimento/cancellazione in testa o coda sono O(1), ma l'accesso casuale è O(n).

Esempio

HashSet

HashSet è una collezione che non ammette duplicati e non garantisce nessun ordine. Usa una tabella hash internamente — operazioni di ricerca e inserimento sono O(1).

Esempio

TreeSet

TreeSet è un Set che mantiene gli elementi in ordine naturale crescente (o con un comparatore personalizzato). Usa un albero red-black internamente — operazioni O(log n).

Esempio

HashMap e TreeMap

HashMap memorizza coppie chiave → valore. Le chiavi sono uniche; i valori possono ripetersi. TreeMap tiene le chiavi ordinate.

HashMap

TreeMap

TreeMap è come HashMap ma mantiene le chiavi ordinate. Utile quando serve iterare in ordine alfabetico o numerico.

Esempio

Iterator

Un Iterator permette di scorrere una collezione in modo sicuro, potendo rimuovere elementi durante l'iterazione senza ConcurrentModificationException.

Esempio

Algoritmi di ordinamento e ricerca

La classe Collections fornisce algoritmi pronti per ordinare, cercare e manipolare collezioni. Arrays fa lo stesso per gli array.

Esempio
ComplessitàAlgoritmoBestMedioWorst
Collections.sort()TimsortO(n)O(n log n)O(n log n)
Arrays.sort()Dual-Pivot QuicksortO(n log n)O(n log n)O(n²)
Collections.binarySearch()Binary searchO(1)O(log n)O(log n)

Wrapper class

Le Wrapper class trasformano i tipi primitivi in oggetti. Sono necessarie per usare tipi primitivi nelle Collections (che accettano solo oggetti).

PrimitivoWrapperMetodo utile
intIntegerInteger.parseInt("42")
doubleDoubleDouble.parseDouble("3.14")
booleanBooleanBoolean.parseBoolean("true")
charCharacterCharacter.isLetter('a')
longLongLong.MAX_VALUE
Autoboxing e unboxing

Generics

I Generics permettono di scrivere classi e metodi che funzionano con qualsiasi tipo, garantendo la sicurezza a compile-time senza cast espliciti.

Esempio

Annotazioni (Annotations)

Le annotazioni forniscono metadati al compilatore o al runtime. Le più usate sono predefinite in Java.

AnnotazioneUso
@OverrideIndica che un metodo sovrascrive quello della superclasse
@DeprecatedSegna un metodo/classe come obsoleto
@SuppressWarningsSopprime avvisi del compilatore
@FunctionalInterfaceIndica un'interfaccia con un solo metodo astratto
@SafeVarargsSopprime avvisi per varargs generici
Esempio @Override

Espressioni regolari (RegEx)

Le espressioni regolari (regex) sono pattern per trovare, validare e manipolare testo. In Java si usa il package java.util.regex.

Esempio

Thread (Programmazione concorrente)

Un thread è un flusso di esecuzione indipendente. Java supporta la programmazione multi-thread nativamente, permettendo di eseguire più compiti in parallelo.

Esempio
💡 In alternativa a extends Thread, implementa Runnable e passalo a un Thread: più flessibile perché non blocca l'ereditarietà.

Lambda (Java 8+)

Le espressioni lambda sono funzioni anonime compatte, usate principalmente con interfacce funzionali e le API Stream.

Lambda + forEach

Sintassi: (parametri) -> espressione oppure (parametri) -> { blocco; }

Esempi pratici Java

Esempi reali e completi per consolidare la programmazione Java con OOP e strutture dati.

Gestione rubrica con HashMap

Rubrica

Calcolo della media con ArrayList

Media voti

Editor online Java

Usa l'editor qui sotto per scrivere e leggere codice Java con la sintassi colorata. Per eseguirlo installa il JDK e lancia javac NomeFile.java && java NomeFile.

Il tuo codice Java

Quiz Java — metti alla prova le tue conoscenze

Rispondi mentalmente a queste domande e poi espandi la risposta per verificare.

  1. Qual è la differenza tra == e .equals() in Java?
    Risposta: == confronta i riferimenti (indirizzi in memoria); .equals() confronta il contenuto. Per le stringhe usa sempre .equals().
  2. Cosa succede se non si chiama super() in un costruttore figlio?
    Risposta: Java lo chiama automaticamente se la superclasse ha un costruttore senza argomenti. Altrimenti è necessario chiamarlo esplicitamente.
  3. Qual è la differenza tra ArrayList e LinkedList?
    Risposta: ArrayList usa un array dinamico (accesso casuale O(1), inserimento in mezzo O(n)); LinkedList usa nodi collegati (inserimento in testa/coda O(1), accesso casuale O(n)).
  4. Cosa significa static?
    Risposta: Un membro static appartiene alla classe, non alle singole istanze. È condiviso tra tutti gli oggetti e si accede tramite il nome della classe.
  5. Quando si usa un'interfaccia invece di una classe astratta?
    Risposta: Si usa l'interfaccia quando si vogliono definire comportamenti da condividere tra classi non correlate. Una classe può implementare più interfacce ma estendere solo una classe.

Esercizi Java con soluzioni

Cinque esercizi pratici con soluzione completa commentata. Prova da solo prima di leggere la soluzione!

Esercizio 1 — Numeri pari tra 1 e 100

Soluzione

Esercizio 2 — Verifica numero primo

Soluzione

Esercizio 3 — Classe Studente con media

Soluzione

Esercizio 4 — Inversione di una stringa

Soluzione

Esercizio 5 — Stack con LinkedList

Soluzione

Sfide Java

Mettiti alla prova con queste sfide di crescente difficoltà:

  1. 🟢 Scrivi un programma che calcola il massimo comune divisore (MCD) di due numeri con l'algoritmo di Euclide.
  2. 🟡 Implementa una lista doppiamente collegata con metodi per aggiungere, rimuovere e stampare tutti i nodi.
  3. 🟡 Crea una classe Libreria che gestisce libri (aggiungi, rimuovi, cerca per autore) usando ArrayList.
  4. 🔴 Implementa un albero binario di ricerca (BST) con metodi di inserimento e visita in-order.
  5. 🔴 Scrivi un programma che usa i thread per simulare produttore-consumatore con una coda condivisa.

Progetti pratici con Java

Progetti reali per consolidare le competenze Java e arricchire il portfolio:

  • 📱 Gestione biblioteca: CRUD per libri/utenti con file CSV come persistenza
  • 🧮 Calcolatrice scientifica: con interfaccia grafica usando Java Swing
  • 🎮 Gioco Tris: implementazione testuale di tic-tac-toe con AI minimax
  • 📊 Analisi dati CSV: leggi file CSV, calcola statistiche, ordina e filtra
  • 🌐 Client HTTP: scarica pagine web con HttpURLConnection e analizza il contenuto
  • 🏦 Banca OOP: sistema bancario completo con account, transazioni, eredità

Programma completo del corso Java

Struttura modulare del corso, ideale per scuola superiore e autodidatti:

ModuloArgomentiOre
1 — BasiInstallazione JDK, Hello World, variabili, tipi, operatori6
2 — ControlloIf/else, switch, while, for, break, continue5
3 — Array e metodiArray 1D/2D, metodi, overloading, scope, ricorsione6
4 — OOP baseClassi, oggetti, costruttori, modificatori, incapsulamento8
5 — OOP avanzatoEreditarietà, polimorfismo, interfacce, this, super, abstract, enum8
6 — Eccezioni & FileTry/catch, multi-catch, try-with-resources, I/O file5
7 — CollectionsList, Set, Map, Iterator, algoritmi6
8 — AvanzatoGenerics, lambda, thread, regex, annotazioni6
9 — ProgettoRealizzazione di un progetto completo8

Piano di studio Java (8 settimane)

SettimanaObiettivo
1Installazione JDK, sintassi base, tipi, operatori, I/O da tastiera
2Strutture di controllo: if/else, switch, while, for, break/continue
3Array, metodi, parametri, overloading, ricorsione
4OOP: classi, oggetti, costruttori, modificatori, incapsulamento
5OOP avanzato: ereditarietà, polimorfismo, interfacce, abstract, enum
6Eccezioni, file I/O, try-with-resources
7Collections Framework: ArrayList, HashMap, HashSet, TreeMap, Iterator
8Lambda, thread, generics — progetto finale

Domande da colloquio Java

Le domande Java più frequenti in colloqui tecnici e selezioni universitarie:

  • 💬 Spiega il principio SOLID. — Cinque principi di buona progettazione OOP: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion.
  • 💬 Cosa è il garbage collector? — Processo JVM che libera automaticamente la memoria non più referenziata.
  • 💬 Differenza tra HashMap e Hashtable?HashMap non è sincronizzata (più veloce), Hashtable è thread-safe ma obsoleta. Per concorrenza usa ConcurrentHashMap.
  • 💬 Cos'è il pattern Singleton? — Garantisce che una classe abbia una sola istanza. Si implementa con costruttore privato e metodo statico getInstance().
  • 💬 Cosa sono le Stream API? — Introdotte in Java 8, permettono operazioni funzionali (filter, map, reduce) su collezioni in modo fluente e leggibile.
  • 💬 Differenza tra abstract class e interface? — La classe astratta può avere stato e implementazioni parziali; l'interfaccia definisce solo contratti (da Java 8 può avere metodi default). Una classe estende una sola classe ma implementa più interfacce.

Bootcamp Java intensivo (2 settimane)

Piano accelerato per chi vuole padroneggiare Java rapidamente. 4-5 ore al giorno.

GiornoContenuto
1-2Setup JDK, sintassi, variabili, tipi, operatori, I/O, condizioni, cicli
3Array, metodi, scope, overloading, varargs
4-5OOP: classi, oggetti, costruttori, modificatori, incapsulamento, ereditarietà
6Polimorfismo, interfacce, classi astratte, enum, inner classes
7Eccezioni, debugging, try-with-resources
8File I/O: FileWriter, BufferedReader, FileInputStream
9-10Collections: ArrayList, LinkedList, HashSet, TreeSet, HashMap, TreeMap
11Generics, lambda, Stream API, annotazioni
12Thread, concorrenza, regex, date/time API
13-14Progetto finale + revisione + domande da colloquio

Riferimento — Parole chiave Java

KeywordUso
classDefinisce una classe
interfaceDefinisce un'interfaccia
extendsEreditarietà (classe)
implementsImplementa un'interfaccia
abstractClasse o metodo astratto
staticMembro di classe (non di istanza)
finalCostante / classe non ereditabile
private / public / protectedModificatori d'accesso
newCrea un nuovo oggetto
thisRiferimento all'istanza corrente
superRiferimento alla superclasse
returnRestituisce un valore dal metodo
voidMetodo senza valore di ritorno
try / catch / finallyGestione eccezioni
throw / throwsLancia eccezioni
importImporta classi da package
packageRaggruppa classi
enumTipo enumerazione
instanceofVerifica il tipo di un oggetto
synchronizedBlocco thread-safe

Riferimento — Metodi String

MetodoDescrizioneEsempio
length()Lunghezza della stringa"Java".length() → 4
charAt(i)Carattere all'indice i"Java".charAt(1) → 'a'
substring(a,b)Sottostringa da a a b"Java".substring(1,3) → "av"
toUpperCase()Converte in maiuscolo"java".toUpperCase() → "JAVA"
toLowerCase()Converte in minuscolo"JAVA".toLowerCase() → "java"
trim()Rimuove spazi iniziali/finali" ciao ".trim() → "ciao"
replace(a,b)Sostituisce occorrenze"ciao".replace("a","o") → "cioo"
contains(s)Controlla se contiene s"Java".contains("av") → true
startsWith(s)Inizia con s?"Java".startsWith("Ja") → true
endsWith(s)Finisce con s?"Java".endsWith("va") → true
indexOf(s)Posizione prima occorrenza"Java".indexOf("a") → 1
split(regex)Divide in array"a,b,c".split(",") → ["a","b","c"]
equals(s)Confronto contenuto"Java".equals("Java") → true
equalsIgnoreCase(s)Confronto senza case"java".equalsIgnoreCase("JAVA") → true
isEmpty()Stringa vuota?"".isEmpty() → true
toCharArray()Converte in array di char"hi".toCharArray() → ['h','i']
valueOf(x)Converte in stringaString.valueOf(42) → "42"
format()Stringa formattataString.format("%.2f", 3.14) → "3,14"

Riferimento — Metodi Math

MetodoDescrizioneEsempio
Math.abs(x)Valore assolutoMath.abs(-5) → 5
Math.max(a,b)Massimo tra a e bMath.max(3,7) → 7
Math.min(a,b)Minimo tra a e bMath.min(3,7) → 3
Math.pow(b,e)b elevato alla eMath.pow(2,10) → 1024.0
Math.sqrt(x)Radice quadrataMath.sqrt(16) → 4.0
Math.round(x)Arrotonda all'intero più vicinoMath.round(3.7) → 4
Math.floor(x)Arrotonda per difettoMath.floor(3.9) → 3.0
Math.ceil(x)Arrotonda per eccessoMath.ceil(3.1) → 4.0
Math.random()Numero casuale [0.0, 1.0)Math.random() → es. 0.42
Math.PIπ ≈ 3.14159Math.PI * r * r
Math.log(x)Logaritmo naturaleMath.log(Math.E) → 1.0
Math.sin/cos/tan(rad)Funzioni trigonometricheMath.sin(Math.PI/2) → 1.0

Riferimento — Collections API

MetodoDescrizione
Collections.sort(list)Ordina la lista in ordine naturale
Collections.sort(list, comp)Ordina con comparatore personalizzato
Collections.reverse(list)Inverte l'ordine degli elementi
Collections.shuffle(list)Mescola casualmente
Collections.max(col)Elemento massimo
Collections.min(col)Elemento minimo
Collections.frequency(col, obj)Conteggio di obj nella collezione
Collections.nCopies(n, obj)Lista con n copie di obj
Collections.unmodifiableList(list)Lista immutabile
Collections.synchronizedList(list)Lista thread-safe
Arrays.asList(a, b, c)Crea una lista da valori
Arrays.sort(arr)Ordina array primitivo
Arrays.copyOf(arr, n)Copia i primi n elementi
Arrays.fill(arr, v)Riempie tutto l'array con v

Certificazione Java

Oracle offre certificazioni ufficiali Java molto apprezzate nel mercato del lavoro:

CertificazioneLivelloPrerequisiti
Oracle Certified Foundations Associate (OCFA) JavaBaseNessuno
Oracle Certified Associate (OCA) — Java SE 8IntermedioBasi Java
Oracle Certified Professional (OCP) — Java SE 11/17/21AvanzatoOCA o esperienza
Oracle Certified Expert (OCE) — Java EEEnterpriseOCP

Come prepararsi

  • 📚 Studia il materiale ufficiale Oracle (education.oracle.com)
  • 📖 Libri consigliati: OCP Java SE 17 Developer Complete Study Guide di Jeanne Boyarsky
  • 🧪 Pratica con mock exam su Enthuware o Whizlabs
  • 💻 Progetto reale con almeno 3 moduli OOP + Collections + I/O
  • ⏱️ Tempo medio di preparazione: 3-4 mesi con 2 ore al giorno

Conclusione — E ora?

Hai completato il corso di Java! Hai imparato la sintassi, la programmazione a oggetti, la gestione degli errori, il file I/O, le Collections e le funzionalità moderne di Java (lambda, generics, thread). Sei pronto per costruire applicazioni reali.

E ora cosa fare?

  • 💻 Installa IntelliJ IDEA Community (gratuito) — il miglior IDE per Java
  • 🐙 Carica i tuoi progetti su GitHub — fondamentale per il portfolio
  • 🌐 Studia Spring Boot — il framework Java più usato per web API
  • 📱 Prova Android Studio — sviluppa app Android con Java/Kotlin
  • 🎯 Affronta la certificazione OCA/OCP — riconosciuta dalle aziende
  • 📖 Leggi Effective Java di Joshua Bloch — la bibbia del Java avanzato
🎯 La tua sfida finale

Realizza una classe ContoBancario con metodi per versare, prelevare (senza andare in rosso) e visualizzare il saldo. Usa ArrayList per registrare tutte le transazioni con data e importo. Poi crea due conti, simula operazioni e stampa l'estratto conto.

✏️ Provalo tu — leggi e modifica il codice Java
Anteprima