• Non ci sono risultati.

Java eccezioni

N/A
N/A
Protected

Academic year: 2021

Condividi "Java eccezioni"

Copied!
20
0
0

Testo completo

(1)

A. Ferrari

eccezioni

Java

Alberto Ferrari – Informatica

(2)

A. Ferrari

eccezioni

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

(3)

A. Ferrari

gestione 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

(4)

A. Ferrari

ignorare 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

(5)

A. Ferrari

esempio

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

(6)

A. Ferrari

gestire 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

(7)

A. Ferrari

try

o si tenta (try) di eseguire il codice e se si verifica un’eccezione si intercetta (catch) per gestirla

try {

blocco_1 }

catch (tipo_eccezione identificatore) {

blocco_2 }

Alberto Ferrari – Informatica

(8)

A. Ferrari

esempio

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

(9)

A. Ferrari

finally

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

(10)

A. Ferrari

propagare 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

(11)

A. Ferrari

eccezioni 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

(12)

A. Ferrari

gestione 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

(13)

A. Ferrari

esempio (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

(14)

A. Ferrari

Esempio (2)

o chi chiama il metodo può controllare l’eventuale eccezione

try {

val = f.valore();

}

catch (ArithmeticException e){

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

}

(15)

A. Ferrari

lanciare 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

(16)

A. Ferrari

esempio (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

(17)

A. Ferrari

esempio (2)

o chi chiama il metodo può controllare l’eventuale eccezione

try {

val = f.valore();

}

catch (Exception e){

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

}

Alberto Ferrari – Informatica

(18)

A. Ferrari

classificazione 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

(19)

A. Ferrari

errori

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

(20)

A. Ferrari

gerarchia

Object Throwable

Error Exception

LinkageError

Virtual MachineError AWTError

RuntimeException

NullPointerException

IndexOutOfBoundException ArthemticException

NoSuchMethodException

Eccezioni non controllate

Riferimenti

Documenti correlati

Si aggiunga alla classe ArrayStack (implementa l’interfaccia Stack usando un array) il metodo Stack clone() che restituisce un nuovo stack avente lo stesso contenuto dello stack...

DICHIARAZIONE: Tutti i Partecipanti, con l’iscrizione alla Manifestazione, accettano i Regolamenti FIASP consultabili presso il punto di visibilità della FIASP presente

Funzioni membro operator* e inversa sintatticamente corrette ma non seguono le richieste del testo Dopo il ciclo di lettura dal file devi salvare il valore di i ad esempio in

Si è costituito in giudizio il comune di Alassio, preliminarmente eccependo l’inammissibilità del ricorso per carenza di interesse (essendo il contratto con SCT

- aveva violato il principio di separatezza tra offerta tecnica ed offerta economica, con la presenza all’interno della prima di «un foglio stampato fronte retro

Se  la  Pa  si  è  scostata  dai  valori  normali  (valore  di  riferimento  VR)  i  meccanismi  di  compenso 

Scrivere una classe Esercizio.java che contiene un metodo notIn che, ricevuta in ingresso una stringa x contenente solamente caratteri alfabetici, stampa a video,

Qualora il conducente sia persona diversa dal proprietario del veicolo (o altro obbligato in solido) e la dichiarazione non è stata firmata in originale ovvero non ha allegata la