Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoAchille Federici Modificato 10 anni fa
1
1.11.20031 Le eccezioni F. Bombi 01/11/2003
2
1.11.20032 Errori e situazioni impreviste situazioni eccezionali In un programma situazioni eccezionali possono verificarsi a causa di: errori di programmazione errori nei dati (dati con valori o formato diverso da quello previsto) presenza di un caso non previsto (ad es. un file non è leggibile o scrivibile o non esiste) Mentre possiamo assumere, anche se questo è difficile da garantire in pratica, che i nostri programmi siano esenti da errori, situazioni impreviste collegate ai dati o alle condizioni al contorno sono sempre possibili
3
1.11.20033 Come gestire le situazioni impreviste metodo diverso La gestione di una situazione imprevista è complicata dal fatto che questa è in genere conseguenza di operazioni compiute molte istruzioni prima probabilmente in un metodo diverso da quello in cui si verifica lerrore segnalato gestito Lerrore deve poter essere segnalato nel momento in cui si verifica ed essere gestito in un altro punto del programma lanciando catturato In Java questo si ottiene lanciando un oggetto nel momento in cui si verifica lerrore, oggetto che verrà catturato da chi si è dichiarato capace di gestire lerrore (al limite dalla Macchina Virtuale)
4
1.11.20034 lanciati Oggetti che possono essere lanciati errorieccezioni In java.lang è definita la classe Throwable superclasse di tutti gli errori e le eccezioni che possono essere lanciati dalla JVM errore Un errore ( Error e le sue sottoclassi) è una condizione eccezionale per la quale non si prevedono azioni correttive Un metodo non è tenuto a dichiarare che nel suo ambito possono essere lanciati Error eccezione Uneccezione ( Exception e le sue sottoclassi) sono invece condizioni eccezionali per le quali è ragionevole prevedere azioni correttive Le sottoclassi di Exception devono essere dichiarate nella clausola throws di un metodo…
5
1.11.20035 devono essere dichiarate o gestite possono essere gestite non vanno gestite
6
1.11.20036 RuntimeException A differenza di quanto si deve fare con le eccezioni sottoclasse di Exception non è necessario dichiarare nella clausola throws di un metodo le eccezioni sottoclassi di RuntimeException Si tratta in genere di eccezioni che quindi possono essere controllate o meno in funzione della particolare applicazione Esempi di RuntimeException : NullPointerException ArrayIndexOutOfBoundsException
7
1.11.20037 Lanciare e catturare uneccezione Uneccezione viene lanciata con la clausola: throw esemplareDiEccezione E viene catturata da una clausola del tipo: try { // blocco in cui si può verificare leccezione } catch (tipoDiEccezione nome) { // blocco in cui viene gestita leccezione }
8
1.11.20038 public static void main (String[] arg) { Fattoriale f = new Fattoriale(); String dato = null; while ((dato = JOptionPane.showInputDialog("Dammi dato"))!= null) { int n = Integer.parseInt(dato); // primo possibile errore System.out.println(f.di(n)); // secondo possibile errore } System.exit(0); } Nel ciclo while si possono verificare due tipi di errore: - si può inserire un dato che non può essere convertito in un intero - si può inserire un dato negativo del quale non si può calcolare fattoriale La risposta della JVM agli errori comporta la segnalazione dellerrore e la terminazione dellapplicazione Un esempio
9
1.11.20039 public static void main (String[] arg) { Fattoriale f = new Fattoriale(); String dato = null; while ((dato = JOptionPane.showInputDialog("Dammi dato"))!= null) { try { int n = Integer.parseInt(dato); System.out.println(f.di(n)); } catch (NumberFormatException e) { System.out.println("Non posso convertire in un numero "+dato); } System.exit(0); } Gestione del primo errore In caso di errore
10
1.11.200310 public static void main (String[] arg) { Fattoriale f = new Fattoriale(); String dato = null; while ((dato = JOptionPane.showInputDialog("Dammi dato"))!= null) { try { int n = Integer.parseInt(dato); try { System.out.println(f.di(n)); } catch (IllegalArgumentException e) { System.out.println("Non posso calcolare il fattoriale di " + dato); } catch (NumberFormatException e) { System.out.println("Non posso convertire in un numero "+dato); } System.exit(0); }
11
1.11.200311 try { int n = Integer.parseInt(dato); System.out.println(f.di(n)) } catch (NumberFormatException e) { System.out.println("Non posso convertire in un numero "+dato); } catch (IllegalArgumentException e) { System.out.println("Non posso calcolare il fattoriale di " + dato); } In alternativa, perdendo un po di selettività nella gestione degli errori è anche possibile catturare più eccezioni in un singolo blocco try utilizzando più clausole catch ciascuna dedicata ad una delle possibili eccezioni
12
1.11.200312 Osservazioni Se non si sa cosa fare in presenza di uneccezione evitare di costruire un blocco try-catch che si limiti a stampare un messaggio terminando lapplicazione: è quello che la JVM fa di default mettere a tacere È vietato mettere a tacere uneccezione try {…} catch (Exception e) {} La cosa da fare è dichiarare che un metodo può lanciare uneccezione con la clausola throws tipoEccezione
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.