1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.

Slides:



Advertisements
Presentazioni simili
Java base V: La gestione delle Eccezioni
Advertisements

© 2007 SEI-Società Editrice Internazionale, Apogeo Unità A2 Java: le basi del linguaggio.
Costruttori e Distruttori
Universita di Camerino
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
LIP: 4 Aprile 2008 ECCEZIONI. Eccezioni Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)
MultiSet, Liste Ordinate
Le gerarchie di tipi.
Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
PolyFun. Dare implementazione,funzione di astrazione, invarianti della rappresentazione. Provare che i metodi apply e bind preservano gli invarianti.
Liste Ordinate 3 Maggio Ultima Lezione Abbiamo visto i tipi di dato astratti IntList e StringList Realizzano liste di interi e di stringhe Realizzati.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Fondamenti di Informatica
Eccezioni Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA Uff
Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Scomposizione di stringhe
Derivazione tra classi
Soluzione Esercizio - Classe Vettore
AA 2005/06 Informatica Programmazione M.A. Alberti-L. Capra 1 Le eccezioni in Java Programmazione Corso di laurea in Informatica.
Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.
AA2003/04 © M.A. Alberti Programmazione Eccezioni 1 Le eccezioni in Java Programmazione Corso di laurea in Informatica.
Approfondimento delle classi
Selezione (=scelta) con “if-else”
1 Le gerarchie di tipi. 2 Supertipi e sottotipi 4 un supertipo –class –interface 4 può avere più sottotipi –un sottotipo extends il supertipo ( class.
Eccezioni.
Concetti di informatica e fondamenti di Java, 4 ed.Apogeo ©2007 Capitolo 11 Ingresso/uscita e gestione delle eccezioni Cay S. Horstmann Concetti di informatica.
Lezione XII Laboratorio di Programmazione. Eccezioni Per la gestione di operazioni che possono non andare a buon fine il C++ mette a disposizione un sistema.
GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori. Lapproccio classico consiste nellinse- rire controlli.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
Corso JAVA Lezione n° 12 Istituto Statale di Istruzione Superiore “F. Enriques”
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
1 Applet ed HTML Fondamenti di Informatica Corso D.
Le eccezioni F. Bombi 01/11/ Errori e situazioni impreviste situazioni eccezionali In un programma situazioni eccezionali possono.
Astrazione procedurale ed eccezioni
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Eccezioni Metodi parziali Eccezioni: Usi e Metodi parziali Eccezioni: rimuovere i requires Eccezioni: rimuovere i requires Eccezioni: definizione, sollevamento,
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Gestione dei thread in Java
Primo Compitino Primo esercizio Identificare gli errori segnalati dal compilatore Verifica statica del codice Regole di binding per i nomi (quelle.
1 Progettazione dettagliata di un Tipo di Dato Astratto: l’ambiente di metodi.
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
Liste Concatenate 11 Aprile E’ una delle strutture dati fondamentali in tutti i linguaggi di programmazione di alto livello Una Lista Concatenata.
1 Astrazione sul controllo: gli iteratori. 2 Gli iteratori 4 perché vogliamo iterarare “in modo astratto” 4 iteratori e generatori in Java –specifica.
1 Progettare un Tipo di Dato Astratto. 2 Scelte di Progetto (astrazione) 4 Caratteristiche degli oggetti –Modificabilità 4 Scelta delle operazioni –Realizzare.
1 Astrazione procedurale ed Eccezioni. 2 Procedure stand alone 4 indipendenti da specifici oggetti 4 come si realizzano in Java –metodi statici definiti.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Ese 3 (del 3 Aprile 2003). Testo Progettare la specifica e l’implementazione del tipo di dato astratto modificabile Stack, supponendo che gli elementi.
Ese 3 (del 3 Aprile 2003). Testo Progettare la specifica e l’implementazione del tipo di dato astratto modificabile Stack, supponendo che gli elementi.
Ese 3 (del 31 Marzo 2004). Testo Dare rappresentazione e realizzazione dei metodi della seguente classe QueueWithPriority. Nella risposta, non riportare.
LIP: 22 Marzo 2005 Eccezioni. Eccezioni-Richiami Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)
Cose nuove di Java (prima a chiacchiera, poi formalmente)
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni.
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
LIP: 15 Marzo 2005 Vettori di interi. Esercizio proposto Definire una classe VectorInt i cui oggetti sono vettori omogenei di interi ordinati in modo.
30/10/01Array 1  Un array e’ una struttura dati che contiene piu’ valori del medesimo tipo.  La lunghezza di un array e’ stabilita quando l’array viene.
1 Metodo I metodi sono uno strumento che i programmatori usano per strutturare i programmi, sia per renderli più facili da capire che per permettere il.
Eccezioni in Java. Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel linguaggio allo scopo.
Transcript della presentazione:

1 Eccezioni in Java

2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse terminazioni eccezionali in Java, corrispondono a diversi tipi di eccezioni il nome del tipo di eccezione fornisce informazione sulla natura del problema 4 Esistono eccezioni predefinite 4 Ma si possono anche definire nuove eccezioni per segnalare situazioni particolari

3 Vedremo 4 Come si lanciano eccezioni 4 Come si gestiscono le eccezioni ( Un programma ben scritto dovrebbe prevedere tali eventualità inserendo delle istruzioni per individuare le anomalie e ripristinare una situazione corretta) 4 Vedremo poi in MP il ruolo e l’utilita’ delle eccezioni (che non indicano solo e necessariamente errori)

4 Le eccezioni in Java 4 i tipi di eccezione sono particolari classi che –contengono solo il costruttore ci possono essere più costruttori overloaded –sono definite in “moduli” separati da quelli che contengono i metodi che le possono sollevare 4 le eccezioni sono oggetti –creati eseguendo new di un exception type e quindi eseguendo il relativo costruttore 4 esiste una gerarchia “predefinita” di tipi relativi alle eccezioni –nuovi tipi di eccezioni sono collocati nella gerarchia con l’usuale extends

5 La gerarchia di tipi per le eccezioni Throwable Exception Error RuntimeException  se un tipo di eccezione estende la classe Exception –l’eccezione è checked  se un tipo di eccezione estende la classe RuntimeException –l’eccezione è unchecked

6 Eccezioni Primitive –IndexOutOfBoundsException –NullPointerException E’ una eccezione unchecked, indica l’accesso ad un elemento inesistente di un array E’ una eccezione unchecked, indica l’accesso ad un oggetto indefinito

7 Altri Errori 4 Errori di Cast 4 Tentativi di accedere a file inesistenti; 4 Fine inaspettata di un file durante la lettura; 4 Errore hardware accedendo a un disco; 4 Chiusura inattesa di una connessione remota...

8 Differenza checked e unchecked 4 se una procedura può sollevare una eccezione checked –deve elencarla nel suo header altrimenti si verifica un errore a tempo di compilazione 4 se una procedura può sollevare una eccezione unchecked –può non elencarla nel suo header Si puo’ comunque elencarla sempre per chiarezza

9 Sintassi della clausola throws ( ) throws,..., { }  La clausola throws viene inserita nella dichiarazione del metodo per informare il compilatore che durante l'esecuzione di quel metodo possono essere generate eccezioni dei tipi elencati dopo la parola chiave throws, la cui gestione viene delegata al chiamante. 4 Quelle checked devono essere obbligatoriamente riportate nell’header

10 Gestione delle Eccezioni 4 Cosa succede quando un metodo termina sollevando un’eccezione? 4 L’eccezione viene passata al metodo chiamante 4 Per default, un metodo che riceve un'eccezione termina l'esecuzione e passa l'eccezione al metodo chiamante.  Quando l'eccezione raggiunge main, l'esecuzione del programma termina stampando un opportuno messaggio di errore.

11 Esempio:riferimento null public class NestedNullPointer { public static void bar(){ Object o = null; System.out.println(o.toString()); } public static void foo(){ bar(); } public static void main(String [] args){ foo(); }

12 Esecuzione  java NestedNullPointerException  in thread "main" java.lang.NullPointerException at NestedNullPointer.bar(NestedNullPointer.java:4) at NestedNullPointer.foo(NestedNullPointer.java:7) at NestedNullPointer.main(NestedNullPointer.java:10) 4 Tutti i metodi annidati terminano  Viene elencata la catena dei metodi attivi nel momento in cui si verifica l'eccezione ( bar - foo - main ) e per ogni metodo la linea di codice dove si è verificata.

13 Esempio:Outof Bounds public class OutOfBounds { public static void main(String [] args){ int [] array = new int [5]; for (int i = 0; i < array.length; i++) { array[i] = (int) (100 * Math.random()); } System.out.println("Contenuto dell'array:"); // Errore nella guardia del for for (int i = 0; i <= array.length; i++) { System.out.println(array[i]); }

14 Alternativa: Gestione Esplicita Il chiamante puo’ –gestione di default, mediante propagazione dell’eccezione alla procedura chiamante possibile solo per eccezioni non checked o per eccezioni checked elencate nell’header della procedura che riceve l’eccezione –gestione esplicita (mediante try and catch) in generale, quando si ritiene di poter recuperare uno stato consistente e di portare a termine una esecuzione quasi “normale”

15 Catturare una Eccezione  Il codice che potrebbe sollevare l’eccezione e’ racchiuso all’interno di uno statement try  Il codice per gestire l’eccezione e’ racchiuso all’interno di uno statement catch

16 Sintassi: forma semplificata try { ; // possono lanciare delle eccezioni } catch( e1) { ; // catturiamo l'eccezione e1 di tipo ; // gestiamo e1 }

17 Semantica Si eseguono le. Se l'esecuzione termina senza fallimenti si prosegue ad eseguire la prima istruzione successiva al blocco try-catch. Altrimenti, se l'esecuzione di lancia un'eccezione except che e’ sottotipo di si eseguono le. Infine si prosegue ad eseguire la prima istruzione successiva al blocco try-catch. Altrimenti, se l’eccezione non e’ sottotipo di il metodo si comporta come se non ci fosse try-catch (l’eccezione viene passata al metodo chiamante

18 Esempio: termina normalmente public class CatchOutOfBounds { public static void main(String [] args) { int [] array = new int [5]; for (int i = 0; i < array.length; i++) { array[i] = (int) (100 * Math.random()); } System.out.println("Contenuto dell'array:"); try { int i = 0; while (true) // ciclo infinito // ben presto i oltrepassera' il limite dell'array System.out.println(array[i++]); } // catch (Throwable e) { catch (ArrayIndexOutOfBoundsException e) { System.out.println("Stampa terminata..."); }

19 4 Supponiamo di avere in una classe Num una procedura statica con la seguente specifica public static int fact (int n) throws NonpositiveExc // EFFECTS: se n>0, ritorna n! // altrimenti solleva NonpositiveExc 4 L’eccezione viene utilizzata per indicare un risultato particolare (invece di fornire un risultato particolare) Esempio

20 try { x = Num.fact (y); } catch (NonPositiveExc e) { // qui possiamo usare e, cioè l’oggetto eccezione String s = e.toString() ; System.out.println(s) }  Nel catch e’ contenuto il codice per gestire l’eccezione 4 Il programma termina normalmente scrivendo il contenuto dell’eccezione (una spiegazione di cosa e’ successo) Esempio

21 public static int search (int[] a, int x) throws NullPointerExc, NotFoundExc // EFFECTS: se a è null solleva NullPointerExc // se x non occorre in a solleva NotFoundexc // altrimenti ritorna un indice in cui occorre Esempio sugli arrays 4 Una procedura stand-alone di una classe Arrays, usa eccezioni diverse per segnalare situazioni particolari

22 Un metodo che la usa  la clausola catch non deve necessariamente identificare il tipo preciso dell’eccezione, ma basta un suo supertipo, principio di sostituzione try { x = Arrays.search (v, y); } catch (Exception e) { s.Println(e); return;} // s è una PrintWriter  segnala l’informazione sia su NullPointerExc che su NotFoundExc, eccezioni sollevate da searchsorted

23 Try e Catch annidati try {...; try { x = Arrays.search (v, y); } catch (NullPointerExc e) { throw new NotFoundExc ();} } catch (NotFoundExc b ) {...}  la clausola catch nel try più esterno cattura l’eccezione NotFoundExc se è sollevata da searchSorted o dalla clausola catch più interna  l’eccezione NullPointerExc non è visibile da fuori

24 Definire nuovi tipi di eccezione public class NuovoTipoDiEcc extends Exception { public NuovoTipoDiEcc(String s) {super(s);} } 4 è checked (analogo per unchecked) 4 definisce solo un costruttore 4 il corpo del costruttore riutilizza semplicemente il costruttore del supertipo –perché deve passargli il parametro 4 una new di questa classe provoca la creazione di un nuovo oggetto che “contiene” la stringa passata come parametro

25 Costruire oggetti eccezione 4 una new di questa classe provoca la creazione di un nuovo oggetto che “contiene” la stringa passata come parametro Exception e = new NuovoTipoDiEcc (“Questa è la ragione”) ; String s = e.toString() ;  la variabile s punta alla stringa “NuovoTipoDiEcc: Questa è la ragione”

26 Lanciare una eccezione: throw 4 una procedura può terminare –(ritorno normale) con un return –(ritorno di una eccezione) con un throw public static int fact (int n) throws NonpositiveExc // EFFECTS: se n>0, ritorna n! // altrimenti solleva NonpositiveExc { if (n <= 0) throw new NonPositiveExc(“Num.fact”);...} 4 la stringa contenuta nell’eccezione è utile soprattutto quando il programma non è in grado di “gestire” l’eccezione –permette all’utente di identificare la procedura che la ha sollevata –può comparire nel messaggio di errore che si stampa subito prima di forzare la terminazione dell’esecuzione

27 Nel Corso di Metodologie 4 Vedremo il ruolo delle Eccezioni (checked e unchecked) 4 Esercizio: per imparare a gestirlo 4 Tabelle (Frames) con le Eccezioni 4 Main che le gestisce……