Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1...

43
Le eccezioni Le eccezioni in Java G. Grossi 17 gennaio 2007 G. Grossi Lezione 12

Transcript of Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1...

Page 1: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioni

Le eccezioni in Java

G. Grossi

17 gennaio 2007

G. Grossi Lezione 12

Page 2: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioni

Indice

1 Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

G. Grossi Lezione 12

Page 3: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Gerarchia eccezioni

Object

Throwable

Error Exception

RunTimeExceptionNon controllate

Controllate

G. Grossi Lezione 12

Page 4: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Indice

1 Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

G. Grossi Lezione 12

Page 5: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Gestire situazioni eccezionali

Anomalie nei dati in ingresso

Scrivere un’applicazione Java che, preso in ingresso un interopositivo, stampi un saluto convenzionale (“Ciao!”) un numero divolte pari all’argomento specificato

L’istruzione Integer.parseInt(args[0])puo sollevare eccezioni? Quali?L’indicizzazione di array args[0] solleva l’eccezionejava.lang.ArrayIndexOutOfBoundsException(vedi documentazione)Il metodo Integer.parseInt() solleva l’eccezionejava.lang.NumberFormatException (vedidocumentazione)

G. Grossi Lezione 12

Page 6: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Gestire situazioni eccezionali

Anomalie nei dati in ingresso

Scrivere un’applicazione Java che, preso in ingresso un interopositivo, stampi un saluto convenzionale (“Ciao!”) un numero divolte pari all’argomento specificato

L’istruzione Integer.parseInt(args[0])puo sollevare eccezioni? Quali?

L’indicizzazione di array args[0] solleva l’eccezionejava.lang.ArrayIndexOutOfBoundsException(vedi documentazione)Il metodo Integer.parseInt() solleva l’eccezionejava.lang.NumberFormatException (vedidocumentazione)

G. Grossi Lezione 12

Page 7: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Gestire situazioni eccezionali

Anomalie nei dati in ingresso

Scrivere un’applicazione Java che, preso in ingresso un interopositivo, stampi un saluto convenzionale (“Ciao!”) un numero divolte pari all’argomento specificato

L’istruzione Integer.parseInt(args[0])puo sollevare eccezioni? Quali?L’indicizzazione di array args[0] solleva l’eccezionejava.lang.ArrayIndexOutOfBoundsException(vedi documentazione)

Il metodo Integer.parseInt() solleva l’eccezionejava.lang.NumberFormatException (vedidocumentazione)

G. Grossi Lezione 12

Page 8: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Gestire situazioni eccezionali

Anomalie nei dati in ingresso

Scrivere un’applicazione Java che, preso in ingresso un interopositivo, stampi un saluto convenzionale (“Ciao!”) un numero divolte pari all’argomento specificato

L’istruzione Integer.parseInt(args[0])puo sollevare eccezioni? Quali?L’indicizzazione di array args[0] solleva l’eccezionejava.lang.ArrayIndexOutOfBoundsException(vedi documentazione)Il metodo Integer.parseInt() solleva l’eccezionejava.lang.NumberFormatException (vedidocumentazione)

G. Grossi Lezione 12

Page 9: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Esempio

Vedi il codice TantiSaluti.java ...

G. Grossi Lezione 12

Page 10: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Sollevare eccezioni

Gestire situazioni eccezionaliScrivere la classe Clock i cui oggetti siano inizializzati con treinteri, rispettivamente ore, minuti e secondi e i cui valori sianovalidi (ore ∈ [1, 12], min e sec ∈ [0, 59])

Il costruttoreClock(int ore, int minuti, int secondi)sembra appropriato ... ma come discriminare i valori degliargomenti?Per i casi in cui i valori degli argomenti passati a metodi ocostruttori sono inappropriati e bene sollevare l’eccezionejava.lang.IllegalArgumentException (vedidocumentazione)

G. Grossi Lezione 12

Page 11: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Sollevare eccezioni

Gestire situazioni eccezionaliScrivere la classe Clock i cui oggetti siano inizializzati con treinteri, rispettivamente ore, minuti e secondi e i cui valori sianovalidi (ore ∈ [1, 12], min e sec ∈ [0, 59])

Il costruttoreClock(int ore, int minuti, int secondi)sembra appropriato ... ma come discriminare i valori degliargomenti?

Per i casi in cui i valori degli argomenti passati a metodi ocostruttori sono inappropriati e bene sollevare l’eccezionejava.lang.IllegalArgumentException (vedidocumentazione)

G. Grossi Lezione 12

Page 12: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Sollevare eccezioni

Gestire situazioni eccezionaliScrivere la classe Clock i cui oggetti siano inizializzati con treinteri, rispettivamente ore, minuti e secondi e i cui valori sianovalidi (ore ∈ [1, 12], min e sec ∈ [0, 59])

Il costruttoreClock(int ore, int minuti, int secondi)sembra appropriato ... ma come discriminare i valori degliargomenti?Per i casi in cui i valori degli argomenti passati a metodi ocostruttori sono inappropriati e bene sollevare l’eccezionejava.lang.IllegalArgumentException (vedidocumentazione)

G. Grossi Lezione 12

Page 13: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Esempio

Vedi il codice Clock.java ...

G. Grossi Lezione 12

Page 14: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Uso improprio delle eccezioni

Quando usate in modo vantaggioso, le eccezionipossono migliorare l’affidabilita, la leggibilita e ilmantenimento del programma. Quando usateimpropriamente, esse producono l’effetto opposto!

Un esempio aberrante ...

try {int i = 0;while(true)

a[i++] = i;} catch(ArrayIndexOutOfBoundsException e) {}

... in luogo alla forma idiomatica classica:

for (int i = 0; i < a.length; i++)a[i] = i;

G. Grossi Lezione 12

Page 15: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Eccezioni non controllate: RunTimeException

Cosa succederebbe se dovessi scrivereif(t == null) throw new NullPointerException()per ogni riferimento in gioco?Codice superfluo ... la Jvm provvede automaticamente asollevare l’eccezione NullPointerException se ilriferimento non e validoLa famiglia di eccezioni RunTimeException hannoquesto comportamento comune e rappresentano errori diprogrammazione: violazioni di regole semanticheNormalmente non vengono intercettate ma spessosollevate recando informazioni piu specifiche di quellestandard

G. Grossi Lezione 12

Page 16: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Gerarchia eccezioni non controllate

Object

Throwable

Error Exception

RunTimeExceptionVirtualMachineError

OutOfMemoryError ArithmeticException

Non controllate

G. Grossi Lezione 12

Page 17: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Le piu comuni del package java.lang

ArithmeticException Viene sollevata quando si verificanoerrori in operzioni aritmetiche, es. divisione perzero

IllegalArgumentException Viene sollevata quando ilchiamante passa un argomento inappropriato

NumberFormatException Viene sollevata quando si tenta diconvertire una stringa in un formato numerico e lastringa non ha un valore appropriato

ArrayIndexOutOfBoundsException Da sollevare quandosi utilizza un indice esterno al range valido per unarray

G. Grossi Lezione 12

Page 18: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Le piu comuni del package java.lang

ArithmeticException Viene sollevata quando si verificanoerrori in operzioni aritmetiche, es. divisione perzero

IllegalArgumentException Viene sollevata quando ilchiamante passa un argomento inappropriato

NumberFormatException Viene sollevata quando si tenta diconvertire una stringa in un formato numerico e lastringa non ha un valore appropriato

ArrayIndexOutOfBoundsException Da sollevare quandosi utilizza un indice esterno al range valido per unarray

G. Grossi Lezione 12

Page 19: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Le piu comuni del package java.lang

ArithmeticException Viene sollevata quando si verificanoerrori in operzioni aritmetiche, es. divisione perzero

IllegalArgumentException Viene sollevata quando ilchiamante passa un argomento inappropriato

NumberFormatException Viene sollevata quando si tenta diconvertire una stringa in un formato numerico e lastringa non ha un valore appropriato

ArrayIndexOutOfBoundsException Da sollevare quandosi utilizza un indice esterno al range valido per unarray

G. Grossi Lezione 12

Page 20: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Le piu comuni del package java.lang

ArithmeticException Viene sollevata quando si verificanoerrori in operzioni aritmetiche, es. divisione perzero

IllegalArgumentException Viene sollevata quando ilchiamante passa un argomento inappropriato

NumberFormatException Viene sollevata quando si tenta diconvertire una stringa in un formato numerico e lastringa non ha un valore appropriato

ArrayIndexOutOfBoundsException Da sollevare quandosi utilizza un indice esterno al range valido per unarray

G. Grossi Lezione 12

Page 21: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

... le piu comuni del package java.lang

ClassCastException Viene sollevata quando si forza untipo riferimento a un sottotipo di cui l’oggettoeffettivo non e istanza

StringIndexOutOfBoundsException Viene sollevataquando si tenta di accedere ad una posizioneinesistente di una stringa

NegativeArraySizeException Viene sollevata quando sitenta di creare un array di dimensione negativa

NullPointerException Viene sollevata quando si tenta diaccedere ad un oggetto tramite riferimento null

G. Grossi Lezione 12

Page 22: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

... le piu comuni del package java.lang

ClassCastException Viene sollevata quando si forza untipo riferimento a un sottotipo di cui l’oggettoeffettivo non e istanza

StringIndexOutOfBoundsException Viene sollevataquando si tenta di accedere ad una posizioneinesistente di una stringa

NegativeArraySizeException Viene sollevata quando sitenta di creare un array di dimensione negativa

NullPointerException Viene sollevata quando si tenta diaccedere ad un oggetto tramite riferimento null

G. Grossi Lezione 12

Page 23: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

... le piu comuni del package java.lang

ClassCastException Viene sollevata quando si forza untipo riferimento a un sottotipo di cui l’oggettoeffettivo non e istanza

StringIndexOutOfBoundsException Viene sollevataquando si tenta di accedere ad una posizioneinesistente di una stringa

NegativeArraySizeException Viene sollevata quando sitenta di creare un array di dimensione negativa

NullPointerException Viene sollevata quando si tenta diaccedere ad un oggetto tramite riferimento null

G. Grossi Lezione 12

Page 24: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

... le piu comuni del package java.lang

ClassCastException Viene sollevata quando si forza untipo riferimento a un sottotipo di cui l’oggettoeffettivo non e istanza

StringIndexOutOfBoundsException Viene sollevataquando si tenta di accedere ad una posizioneinesistente di una stringa

NegativeArraySizeException Viene sollevata quando sitenta di creare un array di dimensione negativa

NullPointerException Viene sollevata quando si tenta diaccedere ad un oggetto tramite riferimento null

G. Grossi Lezione 12

Page 25: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Indice

1 Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

G. Grossi Lezione 12

Page 26: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

La classe java.lang.Exception

package java.lang;

public class Exception extends Throwable {static final long serialVersionUID = -3387516993124229948L;

public Exception() {super();

}

public Exception(String message) {super(message);

}

public Exception(String message, Throwable cause) {super(message, cause);

}

public Exception(Throwable cause) {super(cause);

}

G. Grossi Lezione 12

Page 27: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Definire un’eccezione

La gerarchia standard non contempla tutte le possibilieccezioni, quindi si ha spesso la necessita di definirne dinuove piu intonate con la libreria o packagePer crearne una nuova occorre estenderne una esistente,preferibilmente una (se c’e) che ha un significato “vicino” aquella in fase di concepimentoIl modo piu semplice e quello di creare un nuovo tipo dieccezione e lasciare che il compilatore completi con ilcostruttore di default:

class MySimpleException extends Exception {}

Definiamone ora una piu ricca ...

G. Grossi Lezione 12

Page 28: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

La classe MyException

class MyException extends Exception {private int x;

// COSTRUTTORIpublic MyException() {}

public MyException(String msg) {super(msg);

}

public MyException(String msg, int x) {super(msg);this.x = x;

}

// METODIpublic int valore() {

return x;}

// metodo sovrascrittopublic String getMessage() {

return "Messaggio dettagliato: " + x + " " + super.getMessage();}

}

G. Grossi Lezione 12

Page 29: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Intercettare eccezioni

Se si e all’interno di un metodo e viene sollevata un’eccezione,si puo scegliere di:

lasciare che venga interrotta l’esecuzione del metodoevitando d’intercettare l’eccezione (delega al chiamante)catturare l’eccezione (blocco try ... catch)

try {/* Codice che puo’ generare eccezioni */

} catch(Tipo1 id1) {/* tratta l’eccezione di Tipo1 */

} catch(Tipo2 id2) {/* tratta l’eccezione di Tipo2 */

} catch(Tipo3 id3) {/* tratta l’eccezione di Tipo3 */

}

G. Grossi Lezione 12

Page 30: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

La clausola finally

Spesso si chiede di eseguire una porzione di codiceindipendentemente dal fatto che all’interno del blocco tryvenga sollevata un’eccezione oppure no

try {/* Codice che puo’ generare eccezioni */

} catch(Tipo1 id1) {/* tratta l’eccezione di Tipo1 */

} catch(Tipo2 id2) {/* tratta l’eccezione di Tipo2 */

} finally {/* esegui comunque */

}

G. Grossi Lezione 12

Page 31: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

L’eccezione EmergenzaException

class EmergenzaException extends Exception {

public EmergenzaException() {}

public EmergenzaException(String msg) {super(msg);

}}class Switch {

private boolean state = false;public void on() {

state = true;System.out.println("Acceso ...");

}public void off() {

state = false;System.out.println("Spento ...");

}}

G. Grossi Lezione 12

Page 32: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

La classe CentraleNucleare

public class CentraleNucleare {private static Switch reattore = new Switch();

public static void gestioneEnergia() throws EmergenzaException {// genera energia...throw new EmergenzaException();

}

public static void main(String[] args) {try {

// accendo il reattorereattore.on();// possibili eccezioni (anomalie potenziali)gestioneEnergia();// spengo il reattore (funzionamento normale)reattore.off();

} catch (EmergenzaException e) {System.out.println("Gambe levate!!!!!");reattore.off();

}}

}G. Grossi Lezione 12

Page 33: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

La classe CentraleNucleare1

public class CentraleNucleare1 {private static Switch reattore = new Switch();

public static void gestioneEnergia() throws EmergenzaException {// genera energia...throw new ArithmeticException();

}

public static void main(String[] args) {try {

reattore.on(); // accendo il reattore// possibili eccezioni (anomalie potenziali)gestioneEnergia();

} catch (EmergenzaException e) {System.out.println("Gambe levate!!!!!");

} finally {// spengo il reattore (in tutti i casi)reattore.off();

}}

}

G. Grossi Lezione 12

Page 34: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Gerarchia eccezioni controllate

Object

Throwable

Exception

RunTimeException

Controllate

IOException

FileNotFoundException UnknownHostException

G. Grossi Lezione 12

Page 35: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Indice

1 Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

G. Grossi Lezione 12

Page 36: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Eccezioni in presenza di ereditarieta

Overriding dei metodi

Quando si sovrascrive un metodo, si possono sollevare solo leeccezioni controllate specificate nell’intestazione dei metodipresenti nella classe base (o un sottoinsieme). Questarestrizione e utile perche implica che il codice correttamentefunzionante per la classe base sia valido anche per oggettiderivati da sottoclassi

Un esempio errato ...class ClasseA {

public void f() throws MySimpleException {}}class ClasseB extends ClasseA {

public void f() throws MyException {}}

G. Grossi Lezione 12

Page 37: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Morale ...

... delle eccezioni

Un sistema per il trattamento delle eccezioni rappresentaun”’uscita di sicurezza” che consente di abbandonare ilflusso normale d’esecuzione quando si presenta unacondizione che il metodo corrente non e in grado di trattareUna linea guida nell’uso delle eccezione e il seguente:

non intercettare un’eccezione a meno che non si sappiacosa farne!(Progetto) definire eccezioni controllate per i casi in cui ci siaspetta di essere in grado di porre un rimedio al casoeccezionale(Progetto) usare quelle non controllate per errori diprogrammazionepurtroppo (o per fortuna!) non e sempre cosı “bianco onero”!

G. Grossi Lezione 12

Page 38: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Morale ...

... delle eccezioniUn sistema per il trattamento delle eccezioni rappresentaun”’uscita di sicurezza” che consente di abbandonare ilflusso normale d’esecuzione quando si presenta unacondizione che il metodo corrente non e in grado di trattare

Una linea guida nell’uso delle eccezione e il seguente:

non intercettare un’eccezione a meno che non si sappiacosa farne!(Progetto) definire eccezioni controllate per i casi in cui ci siaspetta di essere in grado di porre un rimedio al casoeccezionale(Progetto) usare quelle non controllate per errori diprogrammazionepurtroppo (o per fortuna!) non e sempre cosı “bianco onero”!

G. Grossi Lezione 12

Page 39: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Morale ...

... delle eccezioniUn sistema per il trattamento delle eccezioni rappresentaun”’uscita di sicurezza” che consente di abbandonare ilflusso normale d’esecuzione quando si presenta unacondizione che il metodo corrente non e in grado di trattareUna linea guida nell’uso delle eccezione e il seguente:

non intercettare un’eccezione a meno che non si sappiacosa farne!(Progetto) definire eccezioni controllate per i casi in cui ci siaspetta di essere in grado di porre un rimedio al casoeccezionale(Progetto) usare quelle non controllate per errori diprogrammazionepurtroppo (o per fortuna!) non e sempre cosı “bianco onero”!

G. Grossi Lezione 12

Page 40: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Morale ...

... delle eccezioniUn sistema per il trattamento delle eccezioni rappresentaun”’uscita di sicurezza” che consente di abbandonare ilflusso normale d’esecuzione quando si presenta unacondizione che il metodo corrente non e in grado di trattareUna linea guida nell’uso delle eccezione e il seguente:

non intercettare un’eccezione a meno che non si sappiacosa farne!

(Progetto) definire eccezioni controllate per i casi in cui ci siaspetta di essere in grado di porre un rimedio al casoeccezionale(Progetto) usare quelle non controllate per errori diprogrammazionepurtroppo (o per fortuna!) non e sempre cosı “bianco onero”!

G. Grossi Lezione 12

Page 41: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Morale ...

... delle eccezioniUn sistema per il trattamento delle eccezioni rappresentaun”’uscita di sicurezza” che consente di abbandonare ilflusso normale d’esecuzione quando si presenta unacondizione che il metodo corrente non e in grado di trattareUna linea guida nell’uso delle eccezione e il seguente:

non intercettare un’eccezione a meno che non si sappiacosa farne!(Progetto) definire eccezioni controllate per i casi in cui ci siaspetta di essere in grado di porre un rimedio al casoeccezionale

(Progetto) usare quelle non controllate per errori diprogrammazionepurtroppo (o per fortuna!) non e sempre cosı “bianco onero”!

G. Grossi Lezione 12

Page 42: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Morale ...

... delle eccezioniUn sistema per il trattamento delle eccezioni rappresentaun”’uscita di sicurezza” che consente di abbandonare ilflusso normale d’esecuzione quando si presenta unacondizione che il metodo corrente non e in grado di trattareUna linea guida nell’uso delle eccezione e il seguente:

non intercettare un’eccezione a meno che non si sappiacosa farne!(Progetto) definire eccezioni controllate per i casi in cui ci siaspetta di essere in grado di porre un rimedio al casoeccezionale(Progetto) usare quelle non controllate per errori diprogrammazione

purtroppo (o per fortuna!) non e sempre cosı “bianco onero”!

G. Grossi Lezione 12

Page 43: Le eccezioni in Java - unimi.itprog.di.unimi.it/laboratorio/lezioni/lez12.pdfLe eccezioni Indice 1 Le eccezioni Eccezioni runtime (non controllate) Eccezioni controllate Eccezioni

Le eccezioniEccezioni runtime (non controllate)Eccezioni controllateEccezioni ed ereditarieta

Morale ...

... delle eccezioniUn sistema per il trattamento delle eccezioni rappresentaun”’uscita di sicurezza” che consente di abbandonare ilflusso normale d’esecuzione quando si presenta unacondizione che il metodo corrente non e in grado di trattareUna linea guida nell’uso delle eccezione e il seguente:

non intercettare un’eccezione a meno che non si sappiacosa farne!(Progetto) definire eccezioni controllate per i casi in cui ci siaspetta di essere in grado di porre un rimedio al casoeccezionale(Progetto) usare quelle non controllate per errori diprogrammazionepurtroppo (o per fortuna!) non e sempre cosı “bianco onero”!

G. Grossi Lezione 12