Eccezioni in java
-
Upload
marcello-missiroli -
Category
Technology
-
view
1.092 -
download
4
description
Transcript of Eccezioni in java
- 1. Eccezioni in Java
- prof. Marcello Missiroli
- 2. ITIS F. Corni, Modena
3. Febbraio 2012 4. [email_address] 5. Tipi di eccezioni
- Hardware
-
- Generato dalla CPU in funzione di un errore (divisione per 0, Segmentazione, ecc.)
- Software
- Definito dal programmatore per tutti gli altri tipi di errore (spesso ricco di informazione).
Dominio
- L'input o i parametri non sono del tipo previsto
Range
-
- Oltre la gamma prevista da un array. L'operazione non pu continuare.
- Monitor
- Stato di una operazione in corso
6. Gestione tradizionale
- Tradizionalmente le eccezioni erano gestite in due modalit:
- Forma parametrizzata
7. Forma basata sul linguaggio 8. Forma parametrizzata
- Indirizzo di una subroutine da chiamare durante un errore.
9. Nome di una label cui saltare in caso di errore. 10. Variabile di status modificata dall'operazione, e controllata dal programma chiamante al ritorno (stdio::errno e simili). 11. Forma basata sul linguaggio
- Subroutine di errore legate a un particolare tipo di dato.
12. Bersaglio di errore definito in fase di compilazione. 13. Istruzioni condizionate del PL/I 14. Problemi
- Come risolviamo questi problemi e lasciamo un sistema dove la gestione degli errori inconsistente e evitabile per costruire un sistema moderno e strutturato logicamente?
- Basata sul linguaggio
-
- Un solo gestore per tipo o oggetto.
- 15. Il gestore predefinito.
16. La soluzione PL/I funziona solo con il PL/I.
- Chiamate parametrizzate:
-
- Non obbligatorio gestire i risultati eccezionali
- 17. Non si pu sapere in fare di compilazione se l'eccezione sar gestita.
18. Ridotto numero di coppie condizioni-gestori. 19. Vediamo un po'
- Prima vediamo come avvile la chiamata ai metodi nei linguaggi OOP
20. Nel nostro caso, in Java. 21. Chiamate ai metodi
- Classe.main()
22. Chiamate ai metodi
- oggetto1.metodo ()
- Classe.main()
23. Chiamate ai metodi
- oggetto2.metodo ()
- oggetto1.metodo ()
- Classe.main()
24. Chiamate ai metodi
- oggetto2.metodo ()
- oggetto1.metodo ()
- Classe.main()
25. Chiamate ai metodi
- oggetto2.metodo ()
- oggetto1.metodo ()
- Classe.main()
26. Chiamate ai metodi
- oggetto2.metodo ()
- oggetto1.metodo ()
- Classe.main()
27. Problemi
- Poich la catena di chiamate pu essere molto lunga, se si verifica un problema pu risultare molto difficile scoprire dove e perch si verificato
- Errori di programmazione?
28. Errori di I/O? 29. Puntatori null? 30. ... 31. Gestione delle eccezioni
- Il costrutto standard di Java (mutuato dal C++) try catch finally che ha la seguente struttura:
try {// Codice che pu generare un errore o un eccezione} catch (ExceptionType identifier) {// Codice che gestisce l'eccezione } finally{// Codice da eseguire in ogni caso } 32. Gestione delle eccezioni
- Il costrutto standard di Java (mutuato dal C++) try catch finally che ha la seguente struttura:
try{// Codice che pu generare un errore o un eccezione} catch(ExceptionType identifier) {// Codice che gestisce l'eccezione } finally{// Codice da eseguire in ogni caso } DEVE esistere ALMENO una clausola catch Finally opzionale (poco usato) 33. Come funziona?
- main () try { num = Integer.parseInt (s); } : catch (NumberFormatException e) { : }
34. Come funziona?
- Integer.parseInt (String s) { : : }
- main () try { num = Integer.parseInt (s); } : catch (NumberFormatException e) { : }
35. Come funziona?
- Integer.parseInt (String s) { L'utente NON inserisce un numero
- corretto!!!
36. }
- main () try { num = Integer.parseInt (s); } : catch (NumberFormatException e) { : }
37. Come funziona?
- Integer.parseInt (String s) {
NumberFormatException e = new NumberFormatException ();
- }
- main () try { num = Integer.parseInt (s); } : catch (NumberFormatException e) { : }
38. Come funziona?
- Integer.parseInt (String s) { : : }
- main () try { num = Integer.parseInt (s); } : catch (NumberFormatException e) { L'eccezione deve essere gestita qui }
39. Come gestire?
- Messaggi di errore comprensibili
40. Assegnare valori sicuri 41. Risolvere situazioni sospese 42. ...ecc... Ricordarsi che l'eccezione un oggetto, e come tale ha metodi interessanti, quali .toString() .getMessage(), .printStackTrace(). 43. A questo punto sappiamo che...
- Ogni bloccotrydeve avere almeno un blocco catch
44. Se si verificaun'eccezione all'interno di un bloccotry :
- Il resto del codice del bloccotryviene saltato.
45. Se c' un blocco catch del tipo corretto (o di una sottoclasse), si esegue. 46. Se c' un bloccofinally , si esegue; in caso contrario, si prosegue. Se non si verifica un'eccezione all'interno del bloccotrye non c' un'istruzioneSystem.exit() :
- Se c' un bloccofinally , lo si esegue
47. Ci siamo?
- Tirate un attimo il fiato, che si prosegue con cose pi complicate.
48. Tipi di Eccezioni
- Throwable
- Error
- VirtualMachineError
- OutOfMemoryError
- Exception
- IOException
- RunTime Exception
- ???
- Excerpt from Big Java by C. Horstmann p. 562
Classe base delle eccezioni Solo questo tipo base pu esserelanciato dal gestore delle eccezioni 49. Tipi di Eccezioni
- Throwable
- Error
- VirtualMachineError
- OutOfMemoryError
- Exception
- IOException
- RunTime Exception
- ???
- Excerpt from Big Java by C. Horstmann p. 562
Errore Solitamente molto grave e irrecuperabile. Pu non essere intercettato ( Unchecked Exception ) 50. Tipi di Eccezioni
- Throwable
- Error
- VirtualMachineError
- OutOfMemoryError
- Exception
- IOException
- RunTime Exception
- ???
- Excerpt from Big Java by C. Horstmann p. 562
Eccezioni Prevedibile e gestibili Devono essere intercettate o dichiarate (C hecked Exception ) 51. Eccezione controllata Se l'eccezione si genera qui..
- oggetto2.metodo ()
- oggetto1.metodo ()
- Classe.main()
52. Eccezione controllata Se l'eccezione si genera qui..
- oggetto2.metodo ()
- oggetto1.metodo ()
- Classe.main()
..o viene catturatadall'oggetto stesso.. 53. Eccezione controllata Se l'eccezione si genera qui..
- oggetto2.metodo ()
- oggetto1.metodo ()
- Classe.main()
..o si propaga verso l'alto,potenzialmente bloccando il programma 54. Eccezione controllata
- Se non si intende gestire l'eccezione, la cosa va segnalata nella dichiarazione del metodo o della classe con la parola chiave throws
class Oggetto2 { private int attr1; private int attr2: . public int getAttr1() { }; } class Oggetto2throws IOException{ private int attr1; private int attr2: . public int getAttr1() { }; } 55. Eccezioni non controllate standard int [] arr = null; arr[0] = 1; arr = new int [4]; int i; for (i = 0; i e Java Exception Handling di James Tam (universit di Calgary)
77. La licenza per questo lavoro Creative Commons BY-SA 3.0 ( http://creativecommons.org/licenses/by-sa/3.0/ )