In questa pagina
Tutorial Java: guide pratiche per i problemi Java di tutti i giorni
Java è un linguaggio orientato agli oggetti e tipizzato staticamente che gira sulla JVM: lo stesso codice alimenta backend aziendali, app Android e sistemi bancari. La maggior parte delle persone lo impara nel modo in cui lo usa: un problema concreto alla volta. Questa pagina è la mappa delle oltre 1.000 guide pratiche Java di DelftStack. Le guide sono raggruppate qui sotto in base al lavoro che stai cercando di portare a termine — accorciare stringhe, decodificare un errore del compilatore, sommare un array, leggere file — e ogni gruppo si apre con guide selezionate dalla redazione che rispondono alle domande più frequenti dei lettori. Se stai scrivendo il tuo primo programma Java, parti dal percorso di apprendimento; se sei arrivato con un errore o un’attività precisa, salta direttamente al gruppo che le corrisponde.
Il percorso di apprendimento Java
Non devi leggere 1.000 guide in ordine. Un itinerario affidabile parte da stringhe e caratteri, perché ogni programma manipola testo, poi insegna come array ed elenchi conservano i dati, poi aggiunge le utilità di tutti i giorni — date, numeri casuali, file — e solo allora dedica tempo serio agli errori del compilatore e a concetti orientati agli oggetti come il binding. Java premia quest’ordine: una volta che sai che cosa il codice sta cercando di esprimere, i rigidi messaggi di errore del compilatore diventano leggibili. Considera le fasi qui sotto come una lista di controllo; quando una ti sembra facile, vai avanti.
- Parti dal testo. Impara a ottenere l’ultimo carattere di una stringa e a convertire una stringa in un char — la gestione dei
charcompare in quasi ogni programma per principianti. - Dati di base. Somma un array e inizializza gli elementi di un array a zero; è con gli array che cicli e indici diventano chiari.
- Attività quotidiane. Stampare la data di oggi, generare un numero casuale, leggere ogni file di una cartella: i gruppi su date e file qui sotto coprono questo lavoro quotidiano.
- Correggi gli errori. Quando il compilatore rifiuta il tuo codice, la guida su identifier expected e le altre guide sugli errori ti mostrano come trovare la causa invece di tirare a indovinare.
- Vai oltre. Scopri in che cosa differiscono il binding statico e quello dinamico, oppure costruisci una prima finestra con un costruttore di GUI.
Dopo il percorso, usa questa pagina come riferimento: ogni gruppo qui sotto è autonomo, e l’indice alfabetico completo sotto ogni sezione elenca tutte le oltre 1.000 guide, compresa la lunga coda che le liste selezionate non possono coprire.
Stringhe e caratteri
Il lavoro sul testo in Java parte da un fatto scomodo: una String è un oggetto e un char è un primitivo, e passare dall’uno all’altro all’inizio confonde tutti. Leggi le prime due guide come una coppia: trattano lo stesso carattere finale da direzioni opposte. Una mostra come leggere l’ultimo carattere di una stringa; l’altra, richiamata in tutta la prima, mostra come rimuoverlo, che è ciò che di solito vuoi quando elimini un delimitatore finale o un a capo. La guida sulla conversione, poi, mostra come un’intera stringa diventa un array di char quando devi elaborarla lettera per lettera.
- Ottenere l’ultimo carattere di una stringa in Java — Leggi il carattere finale in tre modi:
charAt()per unchar,substring()per una stringa di un solo carattere, oppure una conversione in array di caratteri. - Rimuovere l’ultimo carattere da una stringa in Java — La controparte in eliminazione della guida qui sopra: elimina il carattere finale con
substring()oreplaceFirst(), oppure conremoveEnd()echop()di Commons Lang in Java 8+. - Convertire una stringa in un char in Java — Prendi un singolo carattere con
charAt(), l’intero contenuto contoCharArray(), e scopri dovegetBytes()si inserisce — e dove no.
Errori, eccezioni e risoluzione dei problemi
Un errore del compilatore Java è una contestazione precisa, ma solo una volta che sai quale presupposto sta segnalando. Una famiglia di errori merita un’attenzione particolare: le ricerche legate a identifier expected e alle sue varianti sono tra i problemi Java più cercati su questo sito, mentre le risposte si collocano appena fuori dalla prima pagina — significa che il compilatore ha trovato un token dove doveva comparire un nome (di variabile, metodo o parametro), di solito perché un’istruzione si trova fuori da qualsiasi metodo o a un parametro manca il tipo. Gli errori di installazione sono di natura diversa: il codice è a posto, ma Windows si rifiuta di avviarlo. Gli altri errori arrivano quando le tue classi crescono: un operatore applicato a tipi sbagliati, e un metodo che il compilatore non riesce a trovare sul tipo su cui lo hai chiamato. Le guide selezionate di questo gruppo sono al momento disponibili solo in inglese; gli altri argomenti del gruppo si consultano dall’indice qui sotto.
Array e collezioni
Gli array sono la prima struttura dati di Java e quella su cui si fondano tutte le altre collezioni, quindi questo gruppo parte dalle due operazioni che scriverai più spesso: sommare tutto e impostare tutto a un valore iniziale noto. La guida sulla somma è anche un tour dello stile Java moderno: lo stesso ciclo scritto con gli stream mostra quanto il linguaggio sia cambiato. La guida sull’azzeramento risponde a una domanda che sorprende i programmatori C: Java inizializza già gli elementi degli array per te, e i metodi espliciti esistono per reimpostare un array già in uso. La guida sull’ordinamento è il ponte verso il lavoro reale, dove a dover essere ordinati per un campo come una data sono oggetti, non primitivi.
- Ottenere la somma di un array in Java — Totalizza un array di
intcon un semplice ciclofor, oppure con gli stream:Arrays.stream(...).sum(),reduceeIntStream.of(...).sum(). - Inizializzare tutti gli elementi di un array a zero in Java — Reimposta un array con un ciclo,
Arrays.fill(),nCopies(), una riassegnazione oArrays.setAll()— e scopri quando l’azzeramento predefinito di Java lo fa già per te. - Ordinare oggetti in una ArrayList per data in Java — Ordina oggetti personalizzati per il loro campo data in tre modi:
Comparable,Collections.sort()elist.sort()con un comparatore.
Conversione di tipi e operatori
Il sistema di tipi di Java è rigido, il che rende conversioni e operatori una fonte permanente di domande per i principianti. La guida qui sotto tratta il caso dei numeri negativi, dove l’operatore % di Java e Math.floorMod() divergono davvero — e dove scegliere quello sbagliato cambia il risultato in silenzio, senza alcun errore a segnalartelo.
- Il modulo in Java — Calcola i resti con l’operatore
%, e passa aMath.floorMod()quando gli operandi negativi devono restituire un risultato non negativo.
Date, numeri casuali e utilità
Questo piccolo gruppo converte meglio di qualsiasi altro della pagina: ogni guida risponde a una domanda breve e precisa. Le guide sulle date mostrano una libreria in transizione: le vecchie classi java.util.Date e Calendar riempiono ancora il codice esistente, mentre java.time (LocalDate, LocalDateTime, ZonedDateTime) è ciò che dovresti scrivere oggi, e le guide indicano quale è quale. La guida sui numeri casuali copre i tre generatori e quando ciascuno è appropriato. La pulizia della console e il ritardo sono le utilità di cui ogni programma a riga di comando finisce per avere bisogno — con avvertenze oneste, perché Java nasconde deliberatamente il terminale e perché una pausa bloccante a volte è lo strumento sbagliato.
- Generare un numero casuale tra 1 e 10 in Java — Estrai un valore inclusivo tra 1 e 10 con
java.util.Random,Math.random()oThreadLocalRandom— e sappi quale scegliere in presenza di concorrenza. - Ottenere la data di oggi in Java — La data di oggi con
java.util.Date, oppure le moderneLocalDate,LocalDateTimeeZonedDateTimequando conta il fuso orario. - Ottenere l’anno corrente in Java — Leggi l’anno corrente tramite
LocalDate,Calendar,Date,YearMontho Joda Time, da una data completa fino a un singolo intero. - Pulire la console in Java — Pulisci il terminale con sequenze di escape ANSI o un comando del sistema operativo tramite
ProcessBuilder, dopo aver verificato che cosa supportano il tuo terminale e il tuo sistema operativo. - Ritardare di qualche secondo in Java — Metti in pausa con
Thread.sleep()oTimeUnit.sleep(), e pianifica invece di bloccare conScheduledExecutorServicequando altro lavoro deve continuare.
I/O su file e proprietà
Il codice sui file in Java segue una sola forma: individuare e leggere. La guida qui sotto copre la lettura di una cartella, che scala da un semplice elenco piatto a una visita ricorsiva completa, e ordina gli approcci in base alla profondità del tuo albero di directory.
- Leggere tutti i file di una cartella in Java — Elenca e leggi una directory con la classe
Files,newDirectoryStream(), o unawalkFileTree()ricorsiva per le cartelle annidate.
GUI e JavaFX
La storia del desktop Java è vecchia e ancora molto cercata, spinta da una sola domanda: come costruire una finestra senza scrivere a mano il codice di layout per ogni pulsante. La risposta onesta è che Swing resta il framework nella maggior parte del codice esistente, JavaFX è il toolkit più recente, e in entrambi i casi un costruttore visuale cambia il lavoro: dal posizionare i componenti nel codice al disporli su una tela e collegare gli eventi. Parti dalla guida al costruttore se mantieni o stai iniziando un’applicazione Swing; le altre guide del gruppo, nell’indice qui sotto, sono gli approfondimenti per controlli ed eventi specifici. La guida selezionata di questo gruppo è al momento disponibile solo in inglese, quindi in questa sezione trovi solo il testo della guida, e le altre guide si raggiungono dall’indice.
Classi e metodi
Questo gruppo è deliberatamente selettivo: due temi, ognuno dei quali apre un argomento più ampio. La decompilazione risponde a un’emergenza pratica: hai un file .class o una libreria JAR e nessun sorgente, e devi sapere che cosa fa il codice. Il binding risponde a una domanda concettuale che colloqui ed esami adorano, perché decide quale metodo viene eseguito davvero: la scelta fatta in compilazione dal tipo del riferimento, oppure quella fatta a runtime dall’oggetto stesso. Il binding si legge bene tenendo a mente il gruppo degli errori: metà della confusione sul «method undefined» è in realtà un fraintendimento del binding. Le guide selezionate di questo gruppo sono al momento disponibili solo in inglese.
Domande frequenti
Che cosa causa l’errore «identifier expected» in Java?
Il compilatore è arrivato a un punto in cui la grammatica richiede un nome — di variabile, metodo o parametro — e ha trovato qualcos’altro. Le cause abituali sono un’istruzione scritta direttamente nel corpo della classe invece che dentro un metodo, un parametro dichiarato senza il suo tipo, una parentesi graffa fuori posto che chiude un metodo troppo presto, o una risorsa dichiarata in modo scorretto in un try-with-resources. Leggi la riga che indica, poi controlla che cosa la precede immediatamente. La guida su identifier expected esamina ogni causa con una lista di controllo da eseguire prima di ricompilare.
Come genero un numero casuale tra 1 e 10 in Java?
Crea un Random e chiama nextInt(10) + 1: nextInt(10) restituisce 0–9, quindi lo spostamento rende l’intervallo inclusivo a entrambe le estremità. Per un uso rapido e una tantum, (int) (Math.random() * 10) + 1 fa lo stesso lavoro, e nel codice concorrente ThreadLocalRandom.current().nextInt(1, 11) evita la contesa — nota che il suo limite superiore è esclusivo. La guida sui numeri casuali confronta i tre approcci e i loro intervalli.
Esiste typeof in Java?
No: Java non ha un operatore typeof. Gli equivalenti più vicini sono obj.getClass(), che restituisce la classe di runtime dell’oggetto, e instanceof, che verifica se un oggetto appartiene a un tipo o a uno dei suoi sottotipi. Quale dei due ti serve dipende dalla domanda: getClass() risponde a «che cos’è, esattamente?», mentre instanceof risponde a «posso trattarlo come uno di questi?». Gli oggetti wrapper aggiungono un’insidia, perché un Integer dichiara Integer.class, mai int. La guida sulla classe di runtime mostra entrambi, con i casi dei wrapper.
Come ritardo l’esecuzione di qualche secondo in Java?
Chiama Thread.sleep(3000) per mettere in pausa il thread corrente per tre secondi, e gestisci l’InterruptedException che dichiara: catturala oppure lasciala propagare. TimeUnit.SECONDS.sleep(3) esprime lo stesso ritardo in un’unità con nome e si legge meglio nel codice revisionato. Se il thread ha altro lavoro da fare, non bloccarlo affatto: pianifica il passo ritardato con ScheduledExecutorService. La guida sul ritardo copre sia le chiamate bloccanti sia la via della pianificazione.
Perché l’installazione di Java non riesce con «errors in the following switches»?
Questo messaggio di Windows di solito significa che un file .jar è stato passato all’installatore o al launcher Java con opzioni che non capisce — il più delle volte perché l’associazione dei file .jar punta all’eseguibile sbagliato, così che un doppio clic su un programma scatena un errore in stile installazione. Punta l’associazione a javaw.exe, poi prova lo stesso JAR dal prompt dei comandi per separare un problema di associazione da un download danneggiato. Reinstallare Java aiuta solo quando manca o è danneggiato il launcher stesso. La guida sulle opzioni di installazione percorre i controlli in ordine.
Passi successivi
Due gruppi qui sopra stanno crescendo in sotto-guide dedicate: Errori, eccezioni e risoluzione dei problemi, dove i lettori arrivano con problemi urgenti e il cluster di identifier expected si comporta già come un argomento a sé, e Stringhe e caratteri, il gruppo più cliccato di questa raccolta. Finché non arrivano, le sezioni qui sopra sono i punti di ingresso. Per un linguaggio tipizzato dinamicamente o un ecosistema diverso, prosegui con le guide pratiche Python o le guide pratiche C#.