eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che...

20
A. Ferrari eccezioni Java Alberto Ferrari Informatica

Transcript of eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che...

Page 1: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferrari

eccezioniJava

Alberto Ferrari – Informatica

Page 2: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferrarieccezioni

o un’eccezione è un oggetto che descrive una situazione

anomala o una situazione di errore

o le eccezioni vengono «lanciate» (throw) in un punto

del programma e possono essere catturate (catch) e

gestite da altre parti del programma

o anche un errore è rappresentato come un oggetto

Java, ma solitamente rappresenta una situazione non

recuperabile e non gestibile

Alberto Ferrari – Informatica

Page 3: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferrarigestione delle eccezioni

o al verificarsi di una eccezione è possibile:

o ignorarla

o gestirla direttamente

o propagare l’eccezione per gestirla in un’altra parte del

programma

Alberto Ferrari – Informatica

Page 4: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferrariignorare le eccezioni

o se un’eccezione è ignorata il programma termina

producendo un messaggio d’errore

o il messaggio mostra la traccia dello stack delle

chiamate dei metodi con l’indicazione:

o dell’errore

o della linea in cui l’eccezione si è verificata

o delle chiamate di metodi che hanno portato all’eccezione

Alberto Ferrari – Informatica

Page 5: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferrariesempio

int num,den;

double val;

num = 3;

den = 0;

val = num / den;

o Il risultato è:

o Exception in thread "main" java.lang.ArithmeticException: /

by zero at ProvaEccezioni.main(ProvaEccezioni.java:--)

Alberto Ferrari – Informatica

Page 6: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferrarigestire le eccezioni

o la gestione dell’eccezione avviene nel momento stesso

in cui questa può accadere

o le operazioni che possono causare eccezioni vanno

inserite in un blocco try seguito da una o più clausole

catch, che contengono il codice per gestire l’eccezione

o ogni clausola catch è associata ad un tipo di eccezione

e viene chiamata exception handler

o quando si solleva un’eccezione, l’esecuzione prosegue

dalla prima clausola catch che corrisponde al tipo

d’eccezione sollevata

Alberto Ferrari – Informatica

Page 7: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferraritry

o si tenta (try) di eseguire il codice e se si verifica

un’eccezione si intercetta (catch) per gestirlatry

{

blocco_1

}

catch (tipo_eccezione identificatore)

{

blocco_2

}

Alberto Ferrari – Informatica

Page 8: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferrariesempio

int num,den;

double val;

num = 3;

den = 0;

try {

val = num / den;

}

catch (ArithmeticException e){

System.out.println("Si è verificato un errore: ");

System.out.println (e.toString());

}

o il risultato è il seguente: Si è verificato un errore: java.lang.ArithmeticException: / by zero

o il programma però non si blocca e prosegue la sua esecuzione

Alberto Ferrari – Informatica

Page 9: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferrarifinally

o l’istruzione try può essere seguita da una clausola

finally opzionale

o le istruzioni della clausola finally vengono sempre

eseguite:

o se non viene sollevata nessuna eccezione, vengono eseguite

dopo che si è concluso il blocco try

o se si verifica un’eccezione, vengono eseguite dopo le istruzioni

della clausola catch appropriata

Alberto Ferrari – Informatica

Page 10: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferraripropagare le eccezioni

o se l’eccezione non viene intercettata e gestita nel

metodo in cui si verifica, può ancora essere trattata a

un livello più alto

o le eccezioni si propagano attraverso la gerarchia delle

chiamate di metodi finché non vengono intercettate e

gestite

Alberto Ferrari – Informatica

Page 11: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferrarieccezioni controllate

o un’eccezione controllata deve essere raccolta da un

metodo in una clausola catch o deve essere nella lista

delle clausole throws di ciascun metodo che possa

lanciare l’eccezione o propagarla

o la clausola throws deve essere dichiarata

nell’intestazione del metodo

o il compilatore segnala se un’eccezione controllata

non viene gestita propriamente

Alberto Ferrari – Informatica

Page 12: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferrarigestione delle eccezioni

controllate

o un metodo che può sollevare un eccezione controllata

deve dichiararlo con la clausola throws

o a sua volta un metodo che lo richiama deve

intercettarla o dichiararla, cioè deve:

o gestire l’eccezione con la coppia try-catch o

o dichiarare a sua volta che potrà sollevare l’eccezione nella

clausola throws

Alberto Ferrari – Informatica

Page 13: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferrariesempio (1)

public class Frazione {

private int num;

private int den;

public Frazione(int num, int den) {

this.num = num;

this.den = den;

}

public double valore() throws ArithmeticException

{

return num/den);

}

}

o il metodo valore() della classe Frazione può sollevare

un’eccezione

Alberto Ferrari – Informatica

Page 14: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. FerrariEsempio (2)

o chi chiama il metodo può controllare l’eventuale

eccezionetry {

val = f.valore();

}

catch (ArithmeticException e){

System.out.println ("Errore "+e);

}

Alberto Ferrari – Informatica

Page 15: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferrarilanciare un’eccezione

o è possibile definire un’eccezione estendendo la

classe Exception o una sua sottoclasse

o le eccezioni vengono sollevate con l’istruzione throw

o solitamente un’istruzione throw è inclusa in

un’istruzione if che valuta una condizione per

verificare se deve essere sollevata l’eccezione

Alberto Ferrari – Informatica

Page 16: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferrariesempio (1)

public class Frazione {private int num;private int den;public Frazione(int num, int den) {this.num = num;this.den = den;

}public double valore() throws Exception {if (den==0)

throw new Exception("divisione per 0");return (num/den);

}

}• il metodo valore() della classe Frazione può sollevare

un’eccezione

Alberto Ferrari – Informatica

Page 17: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferrariesempio (2)

o chi chiama il metodo può controllare l’eventuale

eccezionetry {

val = f.valore();

}

catch (Exception e){

System.out.println ("Errore "+e);

}

Alberto Ferrari – Informatica

Page 18: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferrariclassificazione delle

eccezioni

o eccezioni controllate

o Il compilatore impone di gestirle

o eccezioni non controllate

o Non viene imposta la gestione che è lasciata al

programmatore

Alberto Ferrari – Informatica

Page 19: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferrarierrori

o gli errori sono simili alle eccezioni

RuntimeException o ai suoi discendenti

o gli errori non devono essere controllati

o gli errori non richiedono una clausola throws

Alberto Ferrari – Informatica

Page 20: eccezioni - albertoferrari.github.io · eccezioni A. Ferrari o un’eccezione è un oggetto che descrive una situazione anomala o una situazione di errore o le eccezioni vengono «lanciate»

A. Ferrarigerarchia

Object

Throwable

ErrorException

LinkageError

Virtual MachineError

AWTError

RuntimeException

ClassNotFoundException

NullPointerException

IndexOutOfBoundException

ArthemticException

NoSuchMethodException

Eccezioni non controllate

Alberto Ferrari – Informatica