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, Appunti di Programmazione Orientata agli Oggetti

Come gestire le eccezioni in java

Tipologia: Appunti

2024/2025

Caricato il 20/09/2025

federica-de-simone-6
federica-de-simone-6 🇮🇹

5 documenti

1 / 10

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Gestione delle eccezioni in Java
Java offre strumenti potenti per gestire condizioni di errore ed eccezioni
che possono verificarsi durante l'esecuzione di un programma. Vediamo
il dettaglio di ogni parte.
1. Condizioni di errore
Un errore può essere causato da:
Errori di programmazione: problemi come divisione per zero,
cast non permessi, accesso oltre i limiti di un array.
Errori di sistema: situazioni come disco danneggiato, memoria
non disponibile, o connessioni chiuse inaspettatamente.
Errori di utilizzo: input errati o tentativi di accedere a file
inesistenti.
2. Gerarchia delle eccezioni in Java
Throwable è la superclasse di tutti gli errori ed eccezioni.
oError: rappresenta problemi gravi (es. OutOfMemoryError),
che non dovrebbero essere gestiti dal programma.
oException: rappresenta errori più comuni, gestibili tramite
codice.
Le eccezioni discendono dalla classe Exception e sono classificate in:
Eccezioni controllate: Devono essere gestite esplicitamente.
Eccezioni non controllate: Derivano da RuntimeException e non
è obbligatorio gestirle.
3. Classe Throwable
Questa classe definisce tutto ciò che può essere "lanciato". Ha due
sottoclassi principali:
Error: usata per problemi critici del sistema.
Exception: usata per situazioni recuperabili.
pf3
pf4
pf5
pf8
pf9
pfa

Anteprima parziale del testo

Scarica Gestione delle eccezioni in Java e più Appunti in PDF di Programmazione Orientata agli Oggetti solo su Docsity!

Gestione delle eccezioni in Java

Java offre strumenti potenti per gestire condizioni di errore ed eccezioni che possono verificarsi durante l'esecuzione di un programma. Vediamo il dettaglio di ogni parte.

1. Condizioni di errore Un errore può essere causato da:  Errori di programmazione : problemi come divisione per zero, cast non permessi, accesso oltre i limiti di un array.  Errori di sistema : situazioni come disco danneggiato, memoria non disponibile, o connessioni chiuse inaspettatamente.  Errori di utilizzo : input errati o tentativi di accedere a file inesistenti. 2. Gerarchia delle eccezioni in JavaThrowable è la superclasse di tutti gli errori ed eccezioni. o Error : rappresenta problemi gravi (es. OutOfMemoryError), che non dovrebbero essere gestiti dal programma. o Exception : rappresenta errori più comuni, gestibili tramite codice. Le eccezioni discendono dalla classe Exception e sono classificate in:  Eccezioni controllate : Devono essere gestite esplicitamente.  Eccezioni non controllate : Derivano da RuntimeException e non è obbligatorio gestirle. 3. Classe Throwable Questa classe definisce tutto ciò che può essere "lanciato". Ha due sottoclassi principali:  Error : usata per problemi critici del sistema.  Exception : usata per situazioni recuperabili.

Classe Error Esempi di errori critici:  OutOfMemoryError : esaurimento della memoria.  AssertionError : violazione di asserzioni. Classe Exception Le eccezioni rappresentano errori recuperabili, come:  Input non valido.  File inesistenti.  Problemi di rete.

4. Eccezioni controllate e non controllateEccezioni non controllate : non è obbligatorio gestirle. Derivano da RuntimeException (es. NullPointerException, IndexOutOfBoundsException).  Eccezioni controllate : devono essere gestite (es. IOException, FileNotFoundException). 5. Creare una nuova eccezione Se le eccezioni predefinite non sono adatte, è possibile creare una nuova classe estendendo:  RuntimeException per eccezioni non controllate.  Exception per eccezioni controllate. Esempio: public class DivisionePerZeroException extends RuntimeException { public DivisionePerZeroException() { super("Divisione per zero!"); } public DivisionePerZeroException(String msg) { super(msg); } }

Scanner in = new Scanner(System.in); System.out.print("Inserisci il numeratore: "); int n = in.nextInt(); System.out.print("Inserisci il denominatore: "); int d = in.nextInt(); try { Divisione div = new Divisione(n, d); double res = div.dividi(); System.out.println("Risultato: " + res); } catch (DivisionePerZeroException e) { System.out.println(e.getMessage()); } } }

8. Segnalare eccezioni controllate Se un metodo può lanciare un'eccezione controllata, bisogna: 1. Gestirla con try-catch. 2. Dichiarare che il metodo può lanciarla usando throws. Esempio: public void calcola() throws IOException { // Metodo che può lanciare IOException } 9. Esempio avanzato: Lettura di un file import java.io.*; import java.util.Scanner; public class TestTry {

public static void main(String[] args) throws IOException { Scanner in = new Scanner(System.in); boolean ok = false; String fileName; System.out.println("Nome del file?"); while (!ok) { try { fileName = in.next(); FileReader fr = new FileReader(fileName); BufferedReader br = new BufferedReader(fr); ok = true; String line; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); } catch (FileNotFoundException e) { System.out.println("File inesistente, nome?"); } } } }

10. Conclusioni La gestione delle eccezioni in Java permette di creare programmi robusti. Con try-catch e throw, possiamo prevenire errori critici, gestire input invalidi e assicurare che il programma si comporti correttamente anche in situazioni impreviste. La Clausola finally Introduzione alla clausola finally

try { Scanner in = new Scanner(reader); readData(in); // Metodo che legge i dati dal file } finally { reader.close(); // Chiusura garantita del file } Spiegazione :

  1. Si apre un file utilizzando FileReader.
  2. Si leggono i dati tramite un Scanner.
  3. La clausola finally garantisce che il file venga chiuso, anche se si verifica un'eccezione durante la lettura. Classi correlate Classe BadDataException Questa classe personalizza un'eccezione per dati non validi. Codice: public class BadDataException extends RuntimeException { public BadDataException() {} public BadDataException(String msg) { super(msg); } } Spiegazione :  Estende RuntimeException.  Consente di specificare un messaggio di errore al momento del lancio dell'eccezione. Classe DataSetReader Legge un insieme di dati da un file. Codice principale:

public double[] readFile(String filename) throws IOException, BadDataException { FileReader reader = new FileReader(filename); try { Scanner in = new Scanner(reader); readData(in); } finally { reader.close(); } return data; } Dettagli importanti :

  1. Metodo readFile : o Accetta il nome del file come input. o Utilizza un blocco try-finally per assicurarsi che il file venga chiuso. o Lancia eccezioni di tipo IOException e BadDataException.
  2. Metodo readData : o Verifica se il file inizia con un numero intero (numberOfValues). o Legge i valori e li memorizza in un array. o Lancia BadDataException se il formato del file non è corretto.
  3. Metodo readValue : o Legge un singolo valore e lo memorizza nell'array. o Lancia BadDataException se non trova un valore numerico. Tester: Classe DataSetTester Esegue il programma e gestisce diverse eccezioni.

 Quando viene lanciata un'eccezione, l'esecuzione normale si interrompe.  Se il blocco try contiene delle clausole catch, il gestore cerca un blocco catch compatibile. Ordine di esecuzione :

  1. Si eseguono le istruzioni del blocco try.
  2. Se si verifica un'eccezione: o Si cercano i blocchi catch applicabili. o Si eseguono i blocchi finally prima di tornare al metodo chiamante.
  3. Se nessun gestore è disponibile, l'eccezione si propaga nel call- stack. Vantaggi dell'uso delle eccezioni
  4. Separazione tra codice regolare e codice per errori : o Il flusso principale è separato dalla gestione degli errori. o Gli errori possono essere gestiti in modo chiaro e leggibile.
  5. Propagazione degli errori : o Gli errori possono essere propagati lungo il call-stack, consentendo a metodi più alti di gestirli.
  6. Raggruppamento e differenziazione degli errori : o Le eccezioni possono essere raggruppate gerarchicamente. o Esempio: FileNotFoundException è una sottoclasse di IOException. Conclusione L'uso delle eccezioni e della clausola finally offre un modo strutturato ed efficiente per gestire gli errori, garantendo una maggiore robustezza e leggibilità del codice.