Eccezioni. Comportamento di default (esempio) Propagazione delle eccezioni

Documenti analoghi
Progettazione del Software

Laboratorio di reti I

Programmazione ad Oggetti

Fondamenti di Informatica

Eccezioni in Java A. FERRARI

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

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

Programmazione a Oggetti Lezione 11. Eccezioni e Packages

FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni

Eccezioni predefinite

Gestione degli Errori in Java. Emilio Di Giacomo e Walter Didimo

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

Gestione delle eccezioni in Java

Le eccezioni in Java

GESTIONE DEGLI ERRORI

GESTIONE DEGLI ERRORI

Eccezioni e Thread (cenni)

Gestire le eccezioni. Lezione XI

Le eccezioni in Java

Le eccezioni in Java

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

Programmazione ad oggetti

Java fornisce una ricca gerarchia di classi di eccezioni: Object

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Ingegneria del software A

Insegnamento di Laboratorio di algoritmi e strutture dati

OOP: L13: Eccezioni e loro trattamento in Java

Introduzione. Java. Errori. Errori

LE ECCEZIONI. Dott. Riccardo Zese.

Gestione delle Eccezioni

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Progettazione del Software

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Eccezioni. Programmazione in rete e laboratorio Eccezioni. Classi eccezioni

Le eccezioni in Java

Gestione delle eccezioni

Eccezioni ed asserzioni

Dal libro di Savitch & Carrano

Gestione delle Eccezioni

Il linguaggio Java. Le eccezioni

8. Java: Eccezioni e Thread

ASD: Sistemi Distribuiti (Prof. Scarano) 24/04/2002

Programmazione a Oggetti. Eccezioni

Gli errori nei programmi si verificano Quello che è realmente importante è: cosa fare dopo che un errore si è verificato?

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

Le basi del linguaggio Java

Prova d Esame Compito A

GESTIONE DEGLI ERRORI. Il gestore delle eccezioni

Prova d Esame Compito A

Esercitazione 2. Java:

Inizializzare oggetti

Prova d Esame Compito A

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Gestione delle eccezioni

Eccezioni. Corso di Tecniche di Programmazione

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

Gestione delle eccezioni

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.) Sapienza - Università di Roma Facoltà di Ingegneria

Introduzione alla programmazione con linguaggio Java {Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F.

Le eccezioni. Eccezioni

"Programmazione Distribuita" - Prof. Scarano. Laurea in Informatica. A.A Università di Salerno 1. Organizzazione della lezione

Gestione delle eccezioni Individuazione e ripristino parseint Individuazione e ripristino Individuazione e ripristino parseint

Package. Corso di Linguaggi di Programmazione ad Oggetti 1 A.A. 2003/04. A cura di Gianmaria Mancosu

Università Ca Foscari DAIS. Programmazione ad Oggetti. Esame del modulo 1

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

Eccezioni Precisazioni e approfondimenti

Gestire le situazioni di errore

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

III Appello - 4 giugno 2009

Lezione 8 Eccezioni e Thread

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

Corso di Reti di Calcolatori L-A

PROGRAMMAZIONE 2 6a. Eccezioni in Java

Il linguaggio Java. Le eccezioni

Principi di Progettazione del Software. Principi di Progettazione del Software a.a

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

Gestione delle eccezioni in Java

La gestione delle eccezioni

Note ed esercizi aggiuntivi

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Principi di Progettazione del Software a.a

Gerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1

Le eccezioni sono eventi che si generano durante l esecuzione di un programma e in genere corrispondono a condizioni anomale.

COGNOME NOME MATRICOLA DATA

COGNOME NOME MATRICOLA DATA

Gestione delle eccezioni

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Gestione delle eccezioni in Java

Riassunto. Rassegna API - 2: eccezioni e file. Eccezioni. Oggi. Gettare, catturare, rimbalzare. Gettare. Stefano Mizzaro 1

Programmazione a oggetti

Individuazione e ripristino. Gestione delle eccezioni. Individuazione e ripristino. Individuazione e ripristino. Eccezioni. Segnalazione di errore

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Introduzione Programmazione Java

Fornisce una interfaccia unificata per un insieme di interfacce di un sottosistema, rendendo più facile l uso di quest ultimo.

Programmazione. Cognome... Nome... Matricola... Prova scritta del 20 febbraio 2012

Corso sul linguaggio Java

Gestione degli errori

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Transcript:

Università degli Studi di Roma La Sapienza Corso di Laurea in Ingegneria dell Informazione (sede di Latina) Corso di Laurea in Ingegneria dell Informazione (consorzio Nettuno) Eccezioni L esistenza di una eccezione indica che si è verificato un problema durante l esecuzione di un programma (situazione anomala) Insegnamento di PROGETTAZIONE DEL SOFTWARE Prof. Domenico Lembo A.A. 2010/11 Programmazione in Java (3): Le Eccezioni Questa è una situazione che un metodo non è in grado di controllare (ma per la quale si possono prendere provvedimenti opportuni) Java possiede un meccanismo che permette al programmatore di trattare le situazioni anomale in modo flessibile e perfettamente integrato con la metodologia orientata ad oggetti le eccezioni sono viste come oggetti di classi particolari 1 Propagazione delle eccezioni Come funziona il meccanismo di gestione delle eccezioni? Quando si verifica un imprevisto, il metodo attivo lancia (throws) un eccezione che viene passata al metodo chiamante Il metodo attivo termina l esecuzione (come con return) Per default, un metodo che riceve un eccezione termina l esecuzione e passa l eccezione al metodo chiamante Quando l eccezione raggiunge il main, l esecuzione del programma termina stampando un opportuno messaggio di errore Comportamento di default (esempio) Per sperimentare con la propagazione delle eccezioni, si compili e si esegua la classe NestedNullPointer: 1 public class NestedNullPointer { 2 public static void bar(){ 3 Object o = null; 4 System.out.println(o.toString()); 5 6 public static void foo(){ 7 bar(); 8 9 10 foo(); 11 12 2 3

Le istruzioni try-catch-finally Comportamento di default (esempio) La macchina astratta Java scriverà qualcosa come: > java NestedNullPointer Exception in thread "main" java.lang.nullpointerexception at NestedNullPointer.bar(NestedNullPointer.java:4) at NestedNullPointer.foo(NestedNullPointer.java:7) at NestedNullPointer.main(NestedNullPointer.java:10) elencando 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. 4 È possibile gestire le eccezioni in modo che il programma non termini in modo disastroso è il seguente Il programmatore racchiude in un blocco try il codice che può generare una eccezione Il blocco try è immediatamente seguito da zero o più blocchi catch Un blocco catch specifica i tipi di eccezioni che può gestire, e il codice che le gestisce Un blocco finally facoltativo, dopo l ultimo blocco catch, specifica del codice che viene sempre eseguito 5 Le istruzioni try-catch-finally Le istruzioni try-catch-finally try { /* blocco try */ catch(tipoecc1 e1) { /* blocco catch */ catch(tipoecc2 e2) { /* blocco catch */... catch(tipoecc2 e2) { /* blocco catch */ finally { /* blocco finally */ Quando viene lanciata una eccezione, il programma abbandona il blocco try e ricerca il gestore appropriato nei blocchi catch Se il tipo di eccezione lanciata corrisponde a quello di un blocco catch, allora il codice di quel blocco viene eseguito, l esecuzione riprende dopo l ultimo blocco catch Se non sono lanciate eccezioni nel blocco try, l esecuzione riprende dopo l ultimo blocco catch Se c e un blocco finally, questo viene sempre eseguito 6 7

Le istruzioni try-catch-finally (esempio) public class NestedNullPointer2 { public static void bar(){ Object o = null; try{ System.out.println(o.toString()); catch(nullpointerexception e) { System.out.println("Si e verificata una eccezione di "+ "tipo NullPointerException"); finally { System.out.println("Questo viene sempre stampato"); public static void foo(){ bar(); foo(); Comportamento di default (esempio 2) L eccezione può essere catturata in uno qualsiasi dei metodi in cui è propagata public class NestedNullPointer3 { public static void bar(){ Object o = null; System.out.println(o.toString()); public static void foo(){ try{ bar(); catch(nullpointerexception e) { System.out.println("Si e verificata una eccezione di "+ "tipo NullPointerException nel metodo bar()"); finally { System.out.println("Questo viene sempre stampato"); foo(); 8 9 La clausola throws Nota Le eventuali istruzioni del blocco finally vengono eseguite sempre, anche in presenza di una eccezione verificatasi nel blocco try che non viene catturata da alcun blocco catch, o in presenza di un return del blocco try o catch. Il blocco finally può contenere delle istruzioni che chiudono dei files oppure rilasciano delle risorse, per garantire la consistenza dello stato. Le eccezioni che non sono state trattate tramite le istruzioni try-catch-finally vanno dichiarate nella clausola throws, facente parte del prototipo del metodo in cui l eccezione si può verificare // File Esempio5.java import java.io.*; public class Esempio5 { public static void main(string[] args) throws IOException { // stampa su schermo il file passato tramite linea di comando FileInputStream istream = new FileInputStream(args[0]); BufferedReader in = new BufferedReader(new InputStreamReader(istream)); String linea = in.readline(); while(linea!= null) { System.out.println(linea); linea = in.readline(); in.close(); 10 11

Eccezioni checked vs unchecked In realtà, non è necessario specificare nella clausola throws tutti i tipi di eccezione non catturate Non si ha quest obbligo per le eccezioni che ereditano dalla classe RuntimeException (unchecked) Lo stesso dicasi per gli errori, che sono oggetti che ereditano dalla classe Error; questi oggetti rappresentano errori di sistema che non devono essere gestiti Si noti che nella classe NestedNullPointer presentata all inizio di queste slide, l eccezione che si può verificare è di tipo NullPointerException, che è una sottoclasse di RuntimeException, e per questo non deve essere necessariamente gestita (come fatto nella classe NullPointerException2) In pratica, eccezioni di tipo RuntimeException non devono necessariamente essere gestite, e cioè non devono necessariamente essere catturate con il meccanismo try-catch, o dichiarate con la clausola throws 12 Gerarchia delle eccezioni Definire una propria classe di eccezioni È possibile farlo estendendo la classe Exception (o una sua sottoclasse). Ad esempio: public class MyException extends Exception { private String messaggio; public MyException(String m) { messaggio = m; public String tostring() { return messaggio; 13 14

Come lanciare una eccezione Per lanciare una eccezione si usa l istruzione throw, che accetta un qualunque oggetto Throwable Si possono anche definire proprie classi di eccezioni, derivandole da Exception MyException e;... throw e; Le eccezioni lanciate vanno segnalate nella clausola throws (ovviamente questo non è necessario se si tratta di RuntimeException) Esempio public class Divisione { public static float divisione(float x, float y) throws MyException{ if ( y==0 ) throw new MyException("La divisione per zero non e possibile"); return x/y; int a=3, b=0; try { System.out.println(divisione(a,b)); catch (MyException e) { System.out.println(e.toString()); 15 16