Gestione delle Eccezioni



Documenti analoghi
Gestione delle eccezioni Individuazione e ripristino parseint Individuazione e ripristino Individuazione e ripristino parseint

Gestione delle eccezioni

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio

Gestione delle eccezioni in Java

Gestione di errori e situazioni eccezionali. Gestione delle eccezioni. Gestione tradizionale di errori e situazioni eccezionali (2)

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Test di unità con JUnit4

Corso sul linguaggio Java

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

Eccezioni. Gestione degli errori. Eccezioni per codificare errori. Eccezioni. Gestione di eccezioni. Approccio tradizionale: Problemi

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Parola chiave extends

Eccezioni per codificare errori. Eccezioni. Gestione di eccezioni. lancio di eccezioni. checked e unchecked. cattura di eccezioni

Visual Basic.NET La Gestione degli Errori di Federico BARBATI

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

ELEMENTI DI PROGETTAZIONE SOFTWARE

Esercitazioni aggiuntive Martedì Laboratorio L-12

Java: Compilatore e Interprete

Flussi, lettori e scrittori

Programmare in Java. Olga Scotti

Le eccezioni in Java

Eccezioni. Comportamento di default (esempio) Propagazione delle eccezioni

Un flusso (stream) è una astrazione che produce e/o consuma informazioni.

LABORATORIO DI INFORMATICA parte 6 -

Esercizi della lezione 5 di Java

Definizione di classi con array di oggetti

Main System Monitor Keyboard

Java threads (2) Programmazione Concorrente

Eccezioni predefinite

Laboratorio di reti I

Eccezioni 1 CASO: SENTIRE E GESTIRE UN ALLARME. Prof. Enrico Denti Università di Bologna A.A. 2012/ SITUAZIONI CRITICHE IL CONCETTO DI ECCEZIONE

13. Chain of Responsibility

Parte II: Reti di calcolatori Lezione 10

Esercizio 6 Realizzare una classe astratta per le Figure piane e due sottoclassi, la sottoclasse Quadrato e la sottoclasse Rettangolo.

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Capitolo 13: Gestione delle eccezioni. Capitolo 13. Gestione delle eccezioni Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

Corso sul linguaggio Java

Architettura MVC-2: i JavaBeans

LAVORI ESTIVI DI INFORMATICA PER LA CLASSE IV Sez. Ainf (Prof. Tessore Luca)

Eccezioni in Java A. FERRARI

Corso di Reti di Calcolatori L-A

Parte II: Reti di calcolatori Lezione 12

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015)

Unità B3 Strutture di controllo

Oggetti Lezione 3. aspetti generali e definizione di classi I

GESTIONE DEI PROCESSI

Dal libro di Savitch & Carrano

Esercitazione n 4. Obiettivi

FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete

Chat. Si ha un server in ascolto sulla porta Quando un client richiede la connessione, il server risponde con: Connessione accettata.

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Java Virtual Machine

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

Eccezioni. Corso di Programmazione CdS: Informatica e Tecnologie per la Produzione di Software Nicola Fanizzi.

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio

Realizzazione di una classe con un associazione

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

Java fornisce una ricca gerarchia di classi di eccezioni: Object

appunti delle lezioni Architetture client/server: applicazioni server

Insegnamento di Laboratorio di algoritmi e strutture dati

Esempio: il conto bancario

Concetto di Funzione e Procedura METODI in Java

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Modulo 4: Ereditarietà, interfacce e clonazione

Algoritmi di Ricerca. Esempi di programmi Java

Programmazione a Oggetti Lezione 10. Ereditarieta

La selezione binaria

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()

Inizializzazione, Assegnamento e Distruzione di Classi

7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità:

Appunti di Informatica 1

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

14 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a luglio 2013

Struttura di un programma Java

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe È qualcosa che abbiamo già visto varie volte

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Cifratura simmetrica

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Le variabili. Olga Scotti

Client e Server comunicano tramite il protocollo SOAP.

UML Diagrammi delle classi. UML Diagramma classi 1

Funzioni in C. Violetta Lonati

Gestione delle eccezioni

Corso di Laurea in Informatica e Comunicazione Digitale. a.a Interazione Uomo-Macchina. Introduzione a Java.

Programmazione a Oggetti Lezione 11. Eccezioni e Packages

Gestione delle Eccezioni

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

10 - Programmare con gli Array

Gestione delle eccezioni. 10/12/2004 Laboratorio di Programmazione - Luca Tesei 1

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Transcript:

Gestione delle Eccezioni Condizioni di Errore Una condizione di errore in un programma può avere molte cause Errori di programmazione Divisione per zero, cast non permesso, accesso oltre i limiti di un array, Errori di sistema Disco rotto, connessione remota chiusa, memoria non disponibile, Errori di utilizzo Input non corretti, tentativo di lavorare su file inesistente, 2

Condizioni di Errore in java Java ha una gerarchia di classi per rappresentare le varie tipologie di errore dislocate in package diversi a seconda del tipo di errore. La superclasse di tutti gli errori è la classe Throwable nel package java.lang. Qualsiasi nuovo tipo di errore deve essere inserito nella discendenza di Throwable solo su gli oggetti di questa classe si possono usare le parole chiave di java per la gestione degli errori. 3 La Superclasse Throwable La superclasse Throwable ha due sottoclassi dirette, sempre in java.lang Error Errori fatali, dovuti a condizioni incontrollabili Esaurimento delle risorse di sistema necessarie alla JVM, incompatibilità di versioni, In genere i programmi non gestiscono questi errori Exception Tutti gli errori che non rientrano in Error I programmi possono gestire o no questi errori a seconda dei casi 4

Eccezioni Una eccezione è un evento che interrompe la normale esecuzione del programma Se si verifica un eccezione il metodo trasferisce il controllo ad un gestore delle eccezioni Il suo compito è quello di uscire dal frammento di codice che ha generato l eccezione e decidere cosa fare 5 Eccezioni Java mette a disposizione varie classi per gestire le eccezioni, nei package java.lang java.io Tutte le classi che gestiscono le eccezioni sono ereditate dalla classe Exception 6

Gerarchia delle classi di eccezioni 7 Tipi di Eccezioni Due categorie: eccezioni controllate dovute a circostanze esterne che il programmatore non può evitare il compilatore vuole sapere cosa fare nel caso si verifichi l eccezione eccezioni non controllate dovute a circostanze che il programmatore può evitare, correggendo il programma 8

Tipi di eccezioni Esempio di eccezione controllata EOFException: terminazione inaspettata del flusso di dati in ingresso Può essere provocata da eventi esterni errore del disco interruzione del collegamento di rete Il gestore dell eccezione si occupa del problema 9 Tipi di eccezioni Esempi di eccezione non controllata NullPointerException: uso di un riferimento null IndexOutofBoundException: accesso ad elementi esterni ai limiti di un array Non bisogna installare un gestore per questo tipo di eccezione Il programmatore può prevenire queste anomalie, correggendo il codice 10

Eccezioni controllate Tutte le sottoclassi di IOException EOFException FileNotFoundException MalformedURLException UnknownHostException ClassNotFoundException CloneNotSupportedException 11 Eccezioni non controllate Tutte le sottoclassi di RunTimeException ArithmeticException ClassCastException IllegalArgumentException IllegalStateException IndexOutOfBoundsException NoSuchElementException NullPointerException 12

Eccezioni controllate e non controllate 13 Eccezioni Per lanciare un eccezione, usiamo la parola chiave throw (lancia), seguita da un oggetto di tipo eccezione throw exceptionobject; Il metodo termina immediatamente e passa il controllo al gestore delle eccezioni Le istruzioni successive non vengono eseguite 14

Lanciare eccezioni: Esempio public class BankAccount public void withdraw(double amount) if (amount > balance) throw new IllegalArgumentException( Saldo insufficiente"); balance = balance - amount;... La stringa in input al costruttore di IllegalArgumentException rappresenta il messaggio d errore da associare all eccezione 15 Segnalare eccezioni BufferedReader.readLine() può lanciare una IOException Un metodo che chiama readline() può gestire l eccezione, cioè dire al compilatore cosa fare non gestire l eccezione, ma dichiarare di poterla lanciare In tal caso, se l eccezione viene lanciata, il programma termina visualizzando un messaggio di errore 16

Segnalare eccezioni Per segnalare le eccezioni controllate che il metodo può lanciare usiamo la parola chiave throws Esempio: public void read(bufferedreader in) throws IOException 17 Segnalare eccezioni public class Coin public void read(bufferedreader in) throws IOException value = Double.parseDouble(in.readLine()); name =in.readline();... La clausola throws segnala al chiamante di Coin.read che esso può generare un eccezione di tipo IOException 18

Segnalare eccezioni Qualunque metodo che chiama Coin.read deve decidere se gestire l eccezione o dichiarare se poterla lanciare public class Purse public void read(bufferedreader in) throws IOException while ( ) Coin c = new Coin(); c.read(in); add(c);... 19 Segnalare eccezioni Un metodo può lanciare più eccezioni controllate, di tipo diverso public void read(bufferedreader in) throws IOException, ClassNotFoundException 20

Usare le Eccezioni di Run Time Le eccezioni di runtime (RuntimeException) possono essere utilizzate per segnalare problemi dovuti ad input errati. Esempi: Un metodo che preleva soldi da un conto corrente non può prelevare una quantità maggiore del saldo Un metodo che effettua una divisione non può dividere un numero per zero 21 Progettare Nuove Eccezioni Se nessuna delle eccezioni di runtime ci sembra adeguata al nostro caso, possiamo progettarne una nuova. I nuovi tipi di eccezioni devono essere inseriti nella discendenza di Throwable, e in genere sono sottoclassi di RuntimeException. Un tipo di eccezione che sia sottoclasse di RuntimeException sarà a controllo non obbligatorio. 22

Progettare Nuove Eccezioni Introduciamo un nuovo tipo di eccezione per controllare che il denominatore sia diverso da zero, prima di eseguire una divisione: public class DivisionePerZeroException extends RuntimeException public DivisionePerZeroException() super("divisione per zero!"); public DivisionePerZeroException(String msg) super(msg); 23 Usare Nuove Eccezioni public class Divisione public Divisione(int n, int d) num=n; den=d; public double dividi() if (den==0) throw new DivisionePerZeroException(); return num/den; private int num; private int den; 24

Usare Nuove Eccezioni: Esempio public class Test public static void main(string[] args) throws IOException double res; InputStreamReader isr=new InputStreamReader(System.in); BufferedReader br=new BufferedReader(isr); System.out.print("Inserisci il numeratore:"); int n= Integer.parseInt(br.readLine()); System.out.print("Inserisci il denominatore:"); int d= Integer.parseInt(br.readLine()); Divisione div = new Divisione(n,d); res = div.dividi(); 25 Usare Nuove Eccezioni: Esempio Inserisci il numeratore: 5 Inserisci il denominatore: 0 DivisionePerZeroException: Divisione per zero! at Divisione.dividi(Divisione.java:12) at divisioneperzero.test.main(test.java:22) Exception in thread "main" Il main invoca il metodo dividi della classe Divisione alla linea 22 Il metodo dividi genera una eccezione alla linea 12 26

Catturare eccezioni Ogni eccezione deve essere gestita, altrimenti causa l arresto del programma Per installare un gestore si usa l enunciato try, seguito da tante clausole catch quante sono le eccezioni da gestire 27 try Catturare eccezioni enunciato enunciato... catch (ClasseEccezione oggettoeccezione) enunciato enunciato... catch (ClasseEccezione oggettoeccezione) enunciato enunciato...... 28

Catturare eccezioni Vengono eseguite le istruzioni all interno del blocco try Se nessuna eccezione viene lanciata, le clausole catch sono ignorate Se viene lanciata una eccezione viene eseguita la corrispondente clausola catch 29 Catturare Eccezioni: Esempio public class Test public static void main(string[] args) throws IOException double res; InputStreamReader isr=new InputStreamReader(System.in); BufferedReader br=new BufferedReader(isr); System.out.print("Inserisci il numeratore:"); int n= Integer.parseInt(br.readLine()); System.out.print("Inserisci il denominatore:"); int d= Integer.parseInt(br.readLine()); 30

Catturare Eccezioni: Esempio try Divisione div = new Divisione(n,d); res = div.dividi(); System.out.print(res); catch(divisioneperzeroexception exception) System.out.println(exception); 31 Catturare eccezioni Cosa fa l istruzione System.out.println(exception);? Invoca il metodo tostring() della classe DivisioneperZeroException Ereditato dalla classe RuntimeException Restituisce una stringa che descrive l oggetto exception costituita da Il nome della classe a cui l oggetto appartiene seguito da : e dal messaggio di errore associato all oggetto 32

Catturare Eccezioni: Esempio Inserisci il numeratore:5 Inserisci il denominatore:0 DivisionePerZeroException: Divisione per zero! DivisionePerZeroException è la classe a cui l oggetto exception appartiene Divisione per zero! È il messaggio di errore associato all oggetto exception (dal costruttore) 33 Catturare eccezioni Per avere un messaggio di errore che stampa lo stack delle chiamate ai metodi in cui si è verificata l eccezione usiamo il metodo printstacktrace() catch(divisioneperzeroexception exception) exception.printstacktrace(); 34

Catturare Eccezioni: Esempio Inserisci il numeratore: 5 Inserisci il denominatore: 0 DivisionePerZeroException: Divisione per zero! at Divisione.dividi(Divisione.java:12) at divisioneperzero.test.main(test.java:22) 35 Catturare eccezioni Scriviamo un programma che chiede all utente il nome di un file Se il file esiste, il suo contenuto viene stampato a video Se il file non esiste viene generata un eccezione Il gestore delle eccezioni avvisa l utente del problema e gli chiede un nuovo file 36

Catturare eccezioni: Esempio import java.io.*; public class TestTry public static void main(string[ ] arg) throws IOException InputStreamReader isr= new InputStreamReader(System.in); BufferedReader br=new BufferedReader(isr); boolean ok=false; String s; System.out.println("Nome del file?"); 37 Catturare eccezioni: Esempio while(!ok) try s=br.readline(); FileReader fr=new FileReader(s); br=new BufferedReader(fr); ok=true; while((s=br.readline())!=null) System.out.println(s); catch(filenotfoundexception e) System.out.println("File inesistente, nome?"); 38

La clausola finally Il lancio di un eccezione arresta il metodo corrente A volte vogliamo eseguire altre istruzioni prima dell arresto La clausola finally viene usata per indicare un istruzione che va eseguita sempre Ad, esempio, se stiamo leggendo un file e si verifica un eccezione, vogliamo comunque chiudere il file 39 La clausola finally try enunciato enunciato... finally enunciato enunciato... 40

La clausola finally Viene eseguita al termine del blocco try Viene comunque eseguita se un istruzione del blocco try lancia un eccezione Può anche essere combinata con clausole catch 41 La clausola finally BufferedReader in; try in = new BufferedReader( new FileReader(filename)); purse.read(in); finally if (in!=null) in.close(); 42