Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Gestione delle eccezioni in Java, Schemi e mappe concettuali di Programmazione Java

Indice degli argomenti • 1. Concetti base sulle Eccezioni • 2. Tipi di Eccezioni • 3. Catturare un'Eccezione (try / catch / finally) • 4. Propagare un'Eccezione (throws)

Tipologia: Schemi e mappe concettuali

2025/2026

In vendita dal 17/04/2026

airruh
airruh 🇮🇹

4.7

(17)

73 documenti

1 / 8

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Gestione delle Eccezioni in Java
Programmazione Orientata agli Oggetti – Lezione 9
Indice degli argomenti
• 1. Concetti base sulle Eccezioni
• 2. Tipi di Eccezioni
• 3. Catturare un'Eccezione (try / catch / finally)
• 4. Propagare un'Eccezione (throws)
pf3
pf4
pf5
pf8

Anteprima parziale del testo

Scarica Gestione delle eccezioni in Java e più Schemi e mappe concettuali in PDF di Programmazione Java solo su Docsity!

Gestione delle Eccezioni in Java

Programmazione Orientata agli Oggetti – Lezione 9

Indice degli argomenti

    1. Concetti base sulle Eccezioni
    1. Tipi di Eccezioni
    1. Catturare un'Eccezione (try / catch / finally)
    1. Propagare un'Eccezione (throws)

1. Concetti base sulle Eccezioni

Un approccio comune alla scrittura di programmi consiste nel presupporre che tutto funzioni normalmente, scrivendo prima la logica per il caso corretto e aggiungendo successivamente il codice che gestisce i casi eccezionali – ovvero gli errori che potrebbero verificarsi durante l'esecuzione.

Java fornisce strumenti appositi per gestire queste situazioni anomale, permettendo di dividere il codice in due sezioni ben distinte:

  • la sezione che gestisce il normale funzionamento del programma;
  • la sezione che gestisce gli errori che potrebbero presentarsi.

In questo modo l'attività di programmazione viene suddivisa in due sotto-attività più piccole e più semplici da trattare in modo indipendente.

Definizione di Eccezione

In Java un'eccezione ( exception ) è un oggetto che segnala il verificarsi di un evento anomalo durante l'esecuzione di un programma. Le eccezioni sono istanze di classi particolari della gerarchia Java.

Terminologia chiave

Termine Significato Lancio / Sollevamento di un'eccezioneIl processo di creazione dell'oggetto eccezione e segnalazione dell'evento anomalo (throw Gestione di un'eccezione Il codice che rileva e si occupa di un'eccezione una volta lanciata (catch). Propagazione di un'eccezione Il meccanismo per cui un metodo delega la gestione dell'eccezione al suo chiamante (thro

IllegalStateException Metodo invocato in uno stato non appropriato dell'oggetto IndexOutOfBoundsException Indice fuori range su una lista o struttura indicizzata

Consiglio pratico: non è necessario memorizzare a priori quali eccezioni siano controllate o meno. Il compilatore Java segnala automaticamente un errore ogni volta che un'eccezione controllata non viene gestita.

Due strategie di gestione

Esistono due modi per gestire un'eccezione in Java:

  1. Catturarla con il blocco try/catch e gestirla direttamente nel metodo corrente.
  2. Propagarla al chiamante con la clausola throws nell'intestazione del metodo.

3. Catturare un'Eccezione

Catturare un'eccezione significa intercettarla nel punto in cui si verifica e gestirla direttamente, evitando l'arresto del programma. In Java questo si realizza con il costrutto try / catch.

Sintassi del blocco try/catch

try { // codice che potrebbe generare un'eccezione } catch (TipoEccezione1 e1) { // gestione dell'eccezione di tipo 1 } catch (TipoEccezione2 e2) { // gestione dell'eccezione di tipo 2 } catch (TipoEccezioneN eN) { // gestione dell'eccezione di tipo N } // codice che prosegue dopo la gestione

Se nel blocco try viene sollevata un'eccezione, l'esecuzione si interrompe immediatamente e il controllo passa al primo blocco catch compatibile con il tipo di eccezione. Dopo l'esecuzione del blocco catch, il programma prosegue con il codice che segue l'ultimo blocco catch definito.

Esempio pratico – scrittura su file

String filePath = "./folder/documento.txt"; String text = "Testo da inserire nel file"; PrintWriter out = null; try { out = new PrintWriter(filePath); out.print(text); } catch (FileNotFoundException e) { e.printStackTrace(); // stampa lo stack trace dell'errore } finally { if (out != null) { out.close(); // chiude il file in ogni caso } } System.out.println("Fine Programma");

Il blocco finally

Il blocco finally è opzionale e può essere inserito dopo i blocchi catch. Il suo contenuto viene sempre eseguito , indipendentemente dal fatto che l'eccezione venga lanciata o meno. È ideale per il codice di pulizia (chiusura di file, connessioni, ecc.):

try { // codice a rischio } catch (TipoEccezione e) { // gestione errore } finally { // eseguito SEMPRE, con o senza eccezione }

Ordine dei blocchi catch – Regola fondamentale

Quando si catturano più eccezioni, i blocchi catch vengono esaminati nell'ordine in cui sono scritti. È fondamentale rispettare la regola:

Inserire sempre le eccezioni più specifiche prima di quelle più generiche.

Se si inserisce prima Exception (classe base) e poi FileNotFoundException (sua sottoclasse), il secondo blocco catch non sarà mai raggiunto , perché qualsiasi FileNotFoundException viene già intercettata dal primo blocco:

// ERRATO – catch(Exception) cattura tutto, FileNotFoundException irraggiungibile: try { ... } catch (Exception e) { ... } // troppo generico come primo catch! catch (FileNotFoundException e) { ... } // DEAD CODE – mai eseguito // CORRETTO – dal piu' specifico al piu' generico: try { ... } catch (FileNotFoundException e) { ... } // specifico catch (Exception e) { ... } // generico come fallback

Cattura di più eccezioni in un singolo blocco (Java 7+)

4. Propagare un'Eccezione

Propagare un'eccezione significa delegare la sua gestione al metodo chiamante , invece di gestirla direttamente con un blocco try/catch. Questa strategia è utile quando il metodo corrente non dispone delle informazioni necessarie per gestire l'errore in modo significativo.

La clausola throws

Per propagare un'eccezione, si aggiunge la clausola throws all'intestazione del metodo, seguita dal nome della classe di eccezione da propagare:

public tipoRitorno nomeMetodo(parametri) throws TipoEccezione { // corpo del metodo – non gestisce l'eccezione direttamente }

Esempio – metodo che propaga FileNotFoundException

public void scriviSuFile(String text) throws FileNotFoundException { PrintWriter out = null; try { out = new PrintWriter(filePath); out.print(text); } finally { if (out != null) { out.close(); } } // NON c'e' catch: l'eccezione viene propagata al chiamante }

Il metodo non gestisce la FileNotFoundException localmente: avvisa il chiamante tramite throws nella firma del metodo, così il chiamante sa che deve a sua volta gestirla o propagarla.

Chi chiama il metodo: due opzioni

Il metodo che invoca scriviSuFile() ha due possibilità:

Opzione 1 – catturare localmente con try/catch:

public void metodoChiamante() { try { scriviSuFile("Testo di esempio"); } catch (FileNotFoundException e) { System.err.println("File non trovato: " + e.getMessage()); } }

Opzione 2 – ri-propagare al proprio chiamante:

public void metodoChiamante() throws FileNotFoundException { scriviSuFile("Testo di esempio"); // propaga a sua volta }

La catena di propagazione

Un'eccezione può essere propagata attraverso una catena di metodi. Se nessun metodo lungo la catena la gestisce, l'eccezione raggiunge il metodo main() e, se anche qui non viene gestita, provoca la terminazione del programma con la stampa dello stack trace.

Livello Metodo Comportamento 3 metodoC()^ Lancia l'eccezione 2 metodoB()^ La propaga con throws 1 metodoA()^ La propaga con throws 0 main()^ La cattura con try/catch oppure il programma termina

Attenzione: la clausola throws non obbliga il metodo a lanciare effettivamente l'eccezione — dichiara solo che potrebbe farlo. È una forma di contratto con il chiamante.

Confronto: catturare vs propagare

Aspetto Catturare (try/catch) Propagare (throws) Quando usarlo Il metodo e' in grado di recuperare dall'errore o vuole gestirlo localmenteIl metodo non ha abbastanza contesto per gestire l'error Effetto L'eccezione viene risolta nel metodo corrente; l'esecuzione continua normalmenteL'eccezione viene delegata al chiamante, che dovra' ges Codice risultante try { ... } catch (Ex e) { ... } public void metodo() throws Ex { ... } Propagazione Si ferma qui Continua verso l'alto nella catena di chiamate

Riepilogo generale del modulo

  • Eccezione : Oggetto che segnala un evento anomalo durante l'esecuzione (istanza di una classe della gerarchia Throwable).
  • Lancio : Creazione e sollevamento di un'eccezione con la parola chiave throw.
  • Eccezione controllata (checked) : Sottoclasse di Exception (non RuntimeException). Gestione obbligatoria pena errore di compilazione.
  • Eccezione non controllata (unchecked) : Sottoclasse di RuntimeException o Error. Gestione facoltativa.
  • try : Blocco che contiene il codice a rischio.
  • catch : Blocco che cattura e gestisce un'eccezione specifica. Piu' catch possono seguire un try.
  • finally : Blocco sempre eseguito (con o senza eccezione), tipicamente usato per il cleanup delle risorse.
  • Ordine dei catch : Dalle eccezioni piu' specifiche alle piu' generiche per evitare blocchi irraggiungibili.
  • Multi-catch (Java 7+) : Un unico catch puo' gestire piu' eccezioni con la sintassi Ex1 | Ex2.
  • throws : Clausola nell'intestazione del metodo per dichiarare la propagazione di un'eccezione al chiamante.