34
Gestione delle Eccezioni Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Prof. Francesco Accarino 1 Gestione delle Eccezioni

Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Embed Size (px)

Citation preview

Page 1: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Gestione delle

Eccezioni

Prof. Francesco Accarino

IIS Altiero Spinelli

Via Leopardi 132 Sesto San Giovanni

Prof. Francesco Accarino 1Gestione delle Eccezioni

Page 2: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Introduzione al concetto di eccezioni

E’ possibile definire un’eccezione come un situazione imprevista che il flusso di un’applicazione può incontrare.

È possibile gestire un’eccezione in Java, imparando ad utilizzare cinque semplici parole chiave: try, catch, finally, throw e throws.

Sarà anche possibile creare eccezioni personalizzate e decidere non solo come, ma anche in quale parte del codice gestirle, grazie ad un meccanismo di propagazione estremamente potente.

Prof. Francesco Accarino 2Gestione delle Eccezioni

Page 3: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Errori

È invece possibile definire un errore come una situazione imprevista non dipendente da un errore commesso dallo sviluppatore.

A differenza delle eccezioni quindi, gli errori non sono gestibili.

Questo concetto è implementato nella libreria Java mediante la classe Error e le sue sottoclassi.

Un esempio di errore che potrebbe causare un programma è quello relativo alla terminazione delle risorse di memoria. Ovviamente, questa condizione non è gestibile.

Prof. Francesco Accarino 3Gestione delle Eccezioni

Page 4: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Gerarchie e categorizzazioni

Prof. Francesco Accarino 4Gestione delle Eccezioni

Page 5: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Meccanismo delle eccezioni

sia la classe Exception sia la classe Error, estendano una classe che si chiama “lanciabile”(Throwable), è dovuto al meccanismo con cui la Java Virtual Machine reagisce quando si imbatte in una eccezione-errore.

Infatti, se il nostro programma genera un’eccezione durante il runtime, la JVM istanzia un oggetto dalla classe eccezione relativa al problema, e “lancia” l’eccezione appena istanziata (tramite la parola chiave throw).

Esempio: ArithmeticException exc = new ArithmeticException();

throw exc;

Prof. Francesco Accarino 5Gestione delle Eccezioni

Page 6: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Categorizzazioni

un’ulteriore categorizzazione delle eccezioni, è data dalla divisione delle eccezioni in checked ed unchecked exception.

Ci si riferisce alle RuntimeException (e le sue sottoclassi) come unchecked exception.

Tutte le altre eccezioni (ovvero tutte quelle che non derivano da RuntimeException), vengono dette checked exception.

Se si utilizza un metodo che lancia una checked exception senza gestirla da qualche parte, la compilazione non andrà a buon fine. Da qui il termine checked exception (in italiano eccezioni controllate).

Prof. Francesco Accarino 6Gestione delle Eccezioni

Page 7: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Checked Exception

Queste eccezioni

devono essere gestite

devono essere gestite

obbligatoriamente

altrimenti in fase di

compialzione verrà

segnalato un errore

Prof. Francesco Accarino 7Gestione delle Eccezioni

Page 8: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

unchecked exception

Queste eccezioni si verificano solo in runtime quindi il

compilatore non segnala alcun errore se non gestite

Prof. Francesco Accarino 8Gestione delle Eccezioni

Page 9: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Alcune importanti eccezioni

Class Description

ArithmeticException Division by zero o altro problema aritmetico

ArrayIndexOutOfBoundsException Un indice di un array è minore di 0 o maggiore o uguale alla dimensione

FileNotFoundException Riferimento ad un file non trovato

IllegalArgumentException Chiamata di un metodo con un paramtro inappropriato

IndexOutOfBoundsException Un indice di un vettore o di una stringa è fuori range

NullPointerException Riferimento ad un oggeto che non è stato instanziato

NumberFormatException Uso di un inapproppriato formato numerico chiamando un metodo

StringIndexOutOfBoundsException Uguale ad ArrayIndexOutOfBoundsException per le stringhe

Prof. Francesco Accarino 9Gestione delle Eccezioni

Page 10: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Alcune importanti eccezioni causate dai metodi

Class Method Exception Raised Description

Double valueOf(String) NumberFormatException La stringa non è un double

Integer parseInt(String) NumberFormatException La stringa non è un int

String String(String) NullPointerException La Stringa è null

indexOf(String) NullPointerException La Stringa è null

lastIndexOf(String) NullPointerException La Stringa è null

charAt(int) StringIndexOutOfBoundsException L’ int è un indice non valido

substring(int) StringIndexOutOfBoundsException L’ int è un indice non valido

substring(int,int) StringIndexOutOfBoundsException Un int è un indice non

valido

Prof. Francesco Accarino 10Gestione delle Eccezioni

Page 11: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Meccanismo per la gestione delle eccezioni

Se bisogna sviluppare una parte di codice che

potenzialmente può scatenare un’eccezione è

possibile circondarlo con un blocco try seguito da

uno o più blocchi catch. Per esempio:

public class Ecc1 {

public static void main(String args[]) {

int a = 10;

int b = 0;

int c = a/b;

System.out.println(c);

}

}

Prof. Francesco Accarino 11Gestione delle Eccezioni

Page 12: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Meccanismo per la gestione delle eccezioni

La classe precedente può essere compilata

senza problemi, ma genererà un’eccezione

durante la sua esecuzione, dovuto

all’impossibilità di eseguire una divisione per

zero. In tal caso, la JVM dopo aver interrotto

il programma produrrà il seguente output:

Exception in thread "main"

java.lang.ArithmeticException: / by zero

at Ecc1.main(Ecc1.java:6)

Prof. Francesco Accarino 12Gestione delle Eccezioni

Page 13: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Meccanismo per la gestione delle eccezioni

L’unico problema è che il programma è terminato prematuramente. Utilizzando le parole chiave try e catch sarà possibile gestire l’eccezione in maniera personalizzata:

public class Ecc2 {public static void main(String args[ ]) {

int a = 10;int b = 0;try {

int c = a/b;System.out.println(c);

}catch (ArithmeticException exc) {

System.out.println("Divisione per zero...");}

}}

Prof. Francesco Accarino 13Gestione delle Eccezioni

Page 14: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Meccanismo per la gestione delle eccezioni

Nell’esempio precedente il reference exc, puntava proprio all’eccezione che la JVM aveva istanziato e lanciato. Infatti tramite esso, è possibile reperire informazioni proprio sull’eccezione stessa. Il modo più utilizzato e completo per ottenere informazioni su ciò che è successo, è invocare il metodo printStackTrace() sull’eccezione stessa:

int a = 10;int b = 0;try {

int c = a/b;System.out.println(c);

}catch (ArithmeticException exc) {

exc.printStackTrace();}

Prof. Francesco Accarino 14Gestione delle Eccezioni

Page 15: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Meccanismo per la gestione delle eccezioni

È ovviamente fondamentale che si dichiari, tramite il blocco catch, un’eccezione del tipo giusto. Per esempio, il seguente frammento di codice:

int a = 10;int b = 0;try {

int c = a/b;System.out.println(c);

}catch (NullPointerException exc) {

exc.printStackTrace();}

produrrebbe un’eccezione non gestita, e, quindi, un’immediata terminazione del programma. Infatti, il blocco try non ha mai lanciato una NullPointerException, ma una ArithmeticException.

Prof. Francesco Accarino 15Gestione delle Eccezioni

Page 16: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Meccanismo per la gestione delle eccezioni

Come per i metodi, anche per i blocchi catch i parametri possono essere polimorfi. Per esempio, il seguente frammento di codice:

int a = 10;int b = 0;try {

int c = a/b;System.out.println(c);

}catch (Exception exc) {

exc.printStackTrace();}

contiene un blocco catch che gestirebbe qualsiasi tipo di eccezione, essendo Exception, la superclasse da cui discende ogni altra eccezione. Il reference exc, è in questo esempio, un parametro polimorfo.

Prof. Francesco Accarino 16Gestione delle Eccezioni

Page 17: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Meccanismo per la gestione delle eccezioni

È anche possibile far seguire ad un blocco try, più blocchi catch, come nel seguente esempio:

int a = 10;int b = 0;try {

int c = a/b;System.out.println(c);

}catch (ArithmeticException exc) {

System.out.println("Divisione per zero...");}catch (NullPointerException exc) {

System.out.println("Reference nullo...");}catch (Exception exc) {

exc.printStackTrace();}

Prof. Francesco Accarino 17Gestione delle Eccezioni

Page 18: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Meccanismo per la gestione delle eccezioni

È anche possibile far seguire ad un blocco try, oltre a blocchi catch, un altro blocco definito dalla parola chiave finally, per esempio:

public class Ecc4 {public static void main(String args[]) {

int a = 10;int b = 0;try {

int c = a/b;System.out.println(c);

}catch (ArithmeticException exc) {

System.out.println("Divisione per zero...");}catch (Exception exc) {

exc.printStackTrace();}finally {

System.out.println("Tentativo di operazione");}

}}

Ciò che è definito in un blocco finally, viene eseguito in qualsiasi caso, sia se viene lanciata l’eccezione, sia se non viene lanciata.

Prof. Francesco Accarino 18Gestione delle Eccezioni

Page 19: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Meccanismo per la gestione delle eccezioni

Un classico esempio (più significativo del precedente) in cui la parola finally è spesso utilizzata è il seguente:

public void insertInDB() {try {

cmd.executeUpdate(“INSERT INTO…”)catch (SQLException exc) {

exc.printStackTrace();}finally {

connection.close();}

}

Prof. Francesco Accarino 19Gestione delle Eccezioni

Page 20: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Eccezioni personalizzate Può essere utile definire nuovi tipi di eccezioni.

Infatti, per un particolare programma, potrebbe

essere una eccezione anche una divisione per 5.

Un programma che deve gestire in maniera

automatica le prenotazioni per un teatro, potrebbe

voler lanciare un’eccezione nel momento in cui si

tenti di prenotare un posto non più disponibile.

In tal caso la soluzione è estendere la classe

Exception, ed eventualmente aggiungere membri e

fare override di metodi come toString(). Segue un

esempio:

Prof. Francesco Accarino 20Gestione delle Eccezioni

Page 21: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Eccezioni personalizzatepublic class PrenotazioneException extends Exception {

public PrenotazioneException() {// Il costruttore di Exception chiamato inizializza la // variabile privata message

super(“Problema con la prenotazione”);}public String toString() {

return getMessage() + “: posti esauriti!”;}

}

La “nostra” eccezione, contiene informazioni sul problema, e rappresenta una astrazione corretta. Tuttavia la JVM, non può lanciare utomaticamente una PrenotazioneException nel caso si tenti di prenotare quando non ci sono più posti disponibile. La JVM infatti, sa quando lanciare una ArithmeticException ma non sa quando lanciare una PrenotazioneException. In tal caso sarà compito dello sviluppatore lanciare l’eccezione. Esiste infatti la parola chiave throw (in inglese “lancia”), che permette il lancio di un’eccezione tramite la seguente sintassi:

PrenotazioneException exc = new PrenotazioneException();throw exc;

Prof. Francesco Accarino 21Gestione delle Eccezioni

Page 22: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Eccezioni personalizzate

Il codice precedente ovviamente farebbe terminare prematuramente il programma a meno di gestire l’eccezione come segue:

try {//controllo sulla disponibilità dei posti

if (postiDisponibili == 0) {//lancio dell’eccezionethrow new PrenotazioneException();

}//istruzione eseguita// se non viene lanciata l’eccezione

postiDisponibili--;}catch (PrenotazioneException exc){

System.out.println(exc.toString());}

Prof. Francesco Accarino 22Gestione delle Eccezioni

Page 23: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

propagazione dell’eccezione

dovendo utilizzare la condizione if, sembra superfluo

l’utilizzo dell’eccezione. In effetti è così! Ma ci deve

essere una ragione per la quale esiste la possibilità

di creare eccezioni personalizzate e di poterle

lanciare. Questa ragione è la “propagazione

dell’eccezione” per i metodi chiamanti. La potenza

della gestione delle eccezioni è dovuta

essenzialemente a questo meccanismo di

propagazione. Per comprenderlo bene, affidiamoci

coma la solito ad un esempio.

Prof. Francesco Accarino 23Gestione delle Eccezioni

Page 24: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

propagazione dell’eccezione Supponiamo di avere la seguente classe:

public class Botteghino {private int postiDisponibili;

public Botteghino() {postiDisponibili = 100;

}public void prenota() {try {

//controllo sulla disponibilità dei postiif (postiDisponibili == 0) {//lancio dell’eccezionethrow new PrenotazioneException();

}//metodo che realizza la prenotazione // se non viene lanciata l’eccezione

postiDisponibili--;}catch (PrenotazioneException exc){System.out.println(exc.toString());

}}

}

Prof. Francesco Accarino 24Gestione delle Eccezioni

Page 25: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

propagazione dell’eccezione

La classe Botteghino astrae in maniera semplicistica, un botteghino virtuale che permette di prenotare i posti in un teatro. Ora consideriamo la seguente classe eseguibile (con metodo main) che utilizza la classe Botteghino:

public class GestorePrenotazioni {public static void main(String [] args) {

Botteghino botteghino = new Botteghino();for (int i = 0; i < 101; ++i){

botteghino.prenota();System.out.println(“Prenotato posto n° ” + i);

}}

}

Prof. Francesco Accarino 25Gestione delle Eccezioni

Page 26: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

propagazione dell’eccezione

Per una classe del genere, il fatto che l’eccezione sia gestita all’interno della classe Botteghino, rappresenta un problema. Infatti l’output del programma sarà:

Prenotato posto n° 1Prenotato posto n° 2...Prenotato posto n° 99Prenotato posto n° 100Problema con la prenotazione: posti esauriti!Prenotato posto n° 101

che ovviamente contiene una contraddizione.

Prof. Francesco Accarino 26Gestione delle Eccezioni

Page 27: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

propagazione dell’eccezione In questo caso, l’ideale sarebbe gestire l’eccezione nella classe

GestorePrenotazioni, piuttosto che nella classe Botteghino:

public class GestorePrenotazioni {public static void main(String [] args) {

Botteghino botteghino = new Botteghino();try {

for (int i = 1; i <= 101; ++i){botteghino.prenota();System.out.println(“Prenotato posto n° ” + i);

}}catch (PrelievoException exc) {

System.out.println(exc.toString());}

}}

Prof. Francesco Accarino 27Gestione delle Eccezioni

Page 28: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

propagazione dell’eccezione

Tutto ciò è fattibile grazie al meccanismo di propagazione dell’eccezione di Java. Per compilare la classe Botteghino però, non basta rimuovere il blocco try – catch dal metodo prenota, ma bisogna anche utilizzare la parola chiave throws nel seguente modo:

public void prenota() throws PrelievoException {//controllo sulla disponibilità dei posti

if (postiDisponibili == 0) {//lancio dell’eccezionethrow new PrenotazioneException();

}//metodo che realizza la prenotazione // se non viene lanciata l’eccezione

postiDisponibili--;}

Prof. Francesco Accarino 28Gestione delle Eccezioni

Page 29: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

propagazione dell’eccezione

In questo modo otteremo il seguente

desiderabile output:

Prenotato posto n° 1

Prenotato posto n° 2

. . .

Prenotato posto n°99

Prenotato posto n°100

Problema con la prenotazione: posti esauriti!

Prof. Francesco Accarino 29Gestione delle Eccezioni

Page 30: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

propagazione dell’eccezione

Se non utilizzassimo la clausola throws nella dichiarazione del metodo, il compilatore non compilerebbe il codice precedente. Infatti, segnalerebbe che il metodo prenota potrebbe lanciare l’eccezione PrelievoException (che è evidente al compilatore per la parola chiave throw), e che questa, non viene gestita. In particolare il messaggio di errore restituito sarebbe simile al seguente:

GestorePrenotazioni2.java:5: unreported exception PrenotazioneException; must be caught or declared to be thrown

Prof. Francesco Accarino 30Gestione delle Eccezioni

Page 31: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

propagazione dell’eccezione

N.B. : Questo messaggio è una ulteriore prova delle caratteristiche di robustezza di Java. Con la clausola throws nella dichiarazione del metodo, in pratica è come se avvertissimo il compilatore che siamo consapevoli che il metodo possa lanciare al runtime la PrelievoException, e di non “preoccuparsi”, perché gestiremo in un’altra parte del codice l’eccezione.

N.B. : Se un metodo “chiamante” vuole utilizzare un altro metodo “daChiamare” che dichiara con una clausola throws il possibile lancio di un certo tipo di eccezione, allora, il metodo “chiamante”, o deve gestire l’eccezione con un blocco try – catch che include la chiamata al metodo “daChiamare”, o deve dichiarare anch’esso una clausola throws alla stessa eccezione. Ad esempio, ciò vale per il metodo main della classe GestorePrenotazioni.

Prof. Francesco Accarino 31Gestione delle Eccezioni

Page 32: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

propagazione dell’eccezione

N.B. : Molti metodi della libreria standard sono dichiarati con clausola throws a qualche eccezione. Per esempio molti metodi delle classi del package java.io, dichiarano clausole throws alla IOException (eccezione di input - output). Appare ancora più chiaro ora la categorizzazione tra eccezioni checked ed unchecked: le checked exception devono essere per forza gestite per poter compilare, le uncheked no, dato che si presentano solo al runtime.

N.B. : E’ possibile dichiarare nella clausola throws anche più di una eccezione, separando le varie tipologie con virgole, come nel seguente esempio:

public void prenota() throws PrelievoException, NullPointerException { . . .

Prof. Francesco Accarino 32Gestione delle Eccezioni

Page 33: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Precisazione sull’override: Quando si fa override di un metodo, non è possibile specificare clausole throws

ad eccezioni che il metodo base non ha nella propria clausola throws. È comunque possibile da parte del metodo che fa override, dichiarare una clausola throws ad eccezioni che sono sottotipi di eccezioni che il metodo base, ha nella sua clausola throws. Per esempio:

public class ClasseBase {public void metodo() throws java.io.IOException { }

}

class SottoClasseCorretta1 extends ClasseBase {public void metodo() throws java.io.IOException {}

}

class SottoClasseCorretta2 extends ClasseBase {public void metodo() throws java.io.FileNotFoundException {}

}

class SottoClasseCorretta3 extends ClasseBase {public void metodo() {}

}

class SottoClasseScorretta extends ClasseBase {public void metodo() throws java.sql.SQLException {}

}

Prof. Francesco Accarino 33Gestione delle Eccezioni

Page 34: Gestione delle Eccezioni - Prof.Accarino delle eccezioni.pdf · parametro polimorfo. Prof. Francesco Accarino Gestione delle Eccezioni 16. ... dell’eccezione di Java. Per compilare

Precisazione sull’override:

La classe ClasseBase ha un metodo che dichiara nella sua clausola throws una IOException.

La classe SottoClasseCorretta1 fa override del metodo e dichiara la stessa IOException nella sua clausola throws.

La classe SottoClasseCorretta2 fa override del metodo e dichiara una FileNotFoundException, che è sottoclasse di IOExceptionnella sua clausola throws.

La classe SottoClasseCorretta3 fa override del metodo e non dichiara clausole throws.

Infine la classe SottoClasseScorretta, fa override del metodo e dichiara una SQLException nella sua clausola throws, e ciò è illegale.

Prof. Francesco Accarino 34Gestione delle Eccezioni