Eccezioni in java

download Eccezioni in java

If you can't read please download the document

description

Una introduzione passo-passo al sistema delle gestioni in Java.

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/ )