• Non ci sono risultati.

U n iv e rs it à d e g li S tud i d i M od e n a e R e gg io E m ili a

N/A
N/A
Protected

Academic year: 2021

Condividi "U n iv e rs it à d e g li S tud i d i M od e n a e R e gg io E m ili a"

Copied!
3
0
0

Testo completo

(1)

Enrico Denti, Franco Zambonelli - ECCEZIONI IN JAVA1

U n iv e rs it à d e g li S tud i d i M od e n a e R e gg io E m ili a

F ac o lt à d i I ng e gn e ri a

C O R S O D I

F O NDA M E N T I D I I N F O R M A T ICA II L ingu a gg io Java : E cce z ion i

Ing . F ra n c o Z a m bon e lli

Lu c id i rea li zz a ti i n c o ll a bo ra z ion e c on Ing . E n ri c o D e n ti - U n iv . B o logn a

A nno A cca d e m ic o 1999 /2000

Enrico Denti, Franco Zambonelli - ECCEZIONI IN JAVA2

E CC EZ IO N I

S p ess o i p rog ra mmi con te ngono is tr u zi on i “c riti ch e” , ch e po tr ebb er o po rta re a e rr o ri.

T ip ica m en te , in qu ei ca si si i n se ris cono con tr o lli ( if … then .. ) p er in te rce tt ar e le sit u az ion i cr iti ch e e ce rca re d i g es ti rle in m odo app rop ria to .

T u tt av ia , qu es to m odo d i p ro ce d er e è sp ess o in sodd is face n te : • non è fac il e p re v ed er e tu tt e le sit u az ion i ch e po tr ebb er o p rodu rr e l’ err o re • “g es ti re” l’ err o re sp ess o si gn if ica so lo st am p ar e a v id eo qu al ch e m ess agg io .

Java a d o tt a a n ch e in qu es to a m b it o un a pp ro cc io inn ova tivo , in tr o du ce nd o il co n ce tt o d i ecce zi o n e: • an zi ch é te n ta re d i p re v ed er e i ca si ch e po ss ono po rta re a e rr o re , si p ro va a es eg u ir e l’ op er a zi o n e in un b lo cc o “ co n tr o ll a to”se si p rdu ce un err o re , l’ o p er a zi o n e so ll ev a un ’ecce zi o n el’ eccez io n e v ie n e ca tt u ra ta d a l b lo cc o en tr o cu i l ’o p er a zi o n e er a es eg u it a , e pu ò ess ere g es tit a n el m o d o p a pp ro p ri a to .

try {

// operazione critica che può sollevare eccez. }

catch (Exception e) {

// gestione dell’eccezione }

S e l’ op er az ion e può so ll ev ar e d iv er si ti p i d i eccez ion e (c o rr is pon - d en ti a d iv er si ti p i d i err o re ), po ss ono ess er e p re v is ti p iù b lo cc h i

catch d i se gu it o all o st ess o b lo cc o try .

(2)

Enrico Denti, Franco Zambonelli - ECCEZIONI IN JAVA3

E S E M P IO

U n a ti p ica op er az ion e “c riti ca” è la le tt u ra d a inpu t. In Ja v a, il d is po siti vo d i i npu t st and ar d è la v ar ia b il e ( static )

System.in , d i cl ass e InputStream ( un a c la ss e a st ra tt a, d i cu i

System.in è un a is ta n za “a no m al a” p re d ef in it a) .

P o ic h é InputStream f o rn is ce so lo un m et odo read() c h e le gg e si ngo li by te , si u sa in ca p su la re System.in in un ogg ett o do ta to d i m agg io ri fun zi o n alit à, co m e a d es em p io un Buffered Reader , ch e fo rn is ce a n ch e un m et odo readLine() :

import java.io.*;

class EsempioIn {

public static void main(String args[]){ int a = 0, b = 0;

BufferedReader in = new BufferedReader( new InputStreamReader( System.in )); try { System.out.print("Primo valore: "); a = Integer.parseInt(in.readLine()); System.out.print("Secondo valore:"); b = Integer.parseInt(in.readLine()); } catch (IOException e) { System.out.println("Errore in input"); } System.ou t.println("La somma vale " + (a+b)); } }

Q u i, readLine() s o ll ev a un a IOException in ca so d i err o re in fa se d i i npu t, m en tr e Integer.parseInt() so ll ev a un a Num-

berFormatException ( non ca tt u ra ta ) se la st ring a re stit u it a d a

readLine() non co rr is pond e a ll a si n ta ss i d i un nu m er o in te ro .

U n a eccez ion e non ca tt u ra ta si p ropaga ve rs o l’ es te rno , d i b lo cc o in b lo cc o : se ra gg iung e il m ai n , p rovo ca l’ abo rto d el p rog ra mm a.

Enrico Denti, Franco Zambonelli - ECCEZIONI IN JAVA4

C O S ’È UN ’E CC EZ IO N E

U n a eccez ion e è un ogg ett o , is ta n za d i java.lang.Throwable o d i un a qu al ch e su a so tt o cl ass e. In p ar ti co la re , le du e so tt o cl ass i p iù co m un i sono • java.lang.Exception • java.lang.Error

L a p ar o la “eccez ion e” è p er ò u su alm en te rif er it a a e n tr am b e.

U n Error ind ica p rob le mi re la ti v i al ca rica m en to d ell a c la ss i o al fun zi on am en to d ell a m acc h in a v ir tu al e Ja v a (e s. no t enough m em - o ry ), e v a c on si d er at o irr ec up er ab il e: p er ci ò non è d a ca ttu ra re .

U n a Exception , inv ece , ind ica d i so lit o sit u az ion i rec up er ab ili (e s: fin e fil e, ind ice d i un arr ay o lt re i limiti , err o ri d i i npu t, et c. ).

P o ic h é un ’eccez io n e è un ogg ett o , può con te n er e d ati o d ef in ir e m et od i: • tu tt e le eccez ion i d ef in is cono un m et odo getMessage() c h e re stit u is ce il m ess agg io d ’e rr o re a ss o ci at o all ’eccez ion e • al cun e eccez ion i d ef in is cono d ei ca m p i, co m e bytesTrans-

ferred in InterruptedIOException , ch e fo rn is cono u lt e- rio ri i n fo rm az ion i u tili p er m eg li o g es ti re la sit u az ion e.

R IL ANC IAR E E CC EZ IO N I Ja v a ric h ie d e c h e un m et odo en tr o cu i si può g en er ar e un ’eccez io - n e o g es ti sc a l’ ecce zi on e, con un co st ru tt o try / catch , opp u re d ic h ia ri d i ril a n ci a rl a a ll ’e st er n o d el m et o d o st ess o , co n la cl a u so la throws :

public int readInteger(BufferedReader in) throws IOException, NumberFormatException { return Integer.parseInt(in.readLine()); }

(3)

Enrico Denti, Franco Zambonelli - ECCEZIONI IN JAVA5

D E F IN IR E E G E N E RAR E NU O V E E CC EZ IO N I

E ss endo un ’eccez ion e nu ll a p iù ch e un no rm al e ogg ett o Ja v a (is ta n za d i un a c la ss e oppo rtun a) , è po ss ib il e • d ef in ir e nuov i ti p i d i eccez ion e d ef in endo nuo ve c la ss i • g en er ar e eccez ion i d all ’in te rno d i p rop ri m et od i.

P er d ef in ire un nu ovo tip o d i eccez io n e b as ta d ef in ir e un a nuov a cl ass e c h e e st end a la c la ss e Exception o un a d ell e su e so tt o cl as - si . A d es em p io :

class NumberTooBigException extends IllegalArgumentException { public NumberTooBigException() { super(); } public NumberTooBigException(String s){super(s);} }

S o lit am en te non è n ece ss ar io d ef in ir e p ar ti co la ri ca m p i d ati , in qu an to l’ in fo rm az ion e fond am en ta le (il ti po d ell ’eccez ion e) è g ià v ei co la ta d all a c la ss e st ess a (e d al m ess agg io s ).

P er la n ci a re un ’eccez io n e d a ll ’in ter n o d i un m et o d o o cc o rr e cr ea re l’ ogg ett o eccez ion e, e po i lan ci a rl o con l’ is tr u zi on e

throw :

public int readInteger(BufferedReader in) throws IOException, NumberFormatException, NumberTooBigException {

int x = Integer.parseInt(in.readLine());

if (x>100) throw new NumberTooBigException();

return x; } • n o n co n fo nd ere throw (c h e è un ’is tr u zi on e c h e la n ci a un ’ecce zi o n e) con la d ic h ia raz ion e throws (u sa ta n ell a d ic h ia raz ion e d i un a c la ss e) • la c reaz ion e d ell ’ogg ett o NumberToo Big Exception può avv en ir e - e sp ess o avv ie n e - en tr o l’ is tr u zi on e throw s te ss a.

Riferimenti

Documenti correlati

raggiungere la definitività della sentenza, non sembrerebbe inopportuno, forse, rivisitare l'intero sistema delle impugnazioni, ad es. introducendo un filtro per la declaratoria

CONTENUTI: L’estraneità della materia al comune bagaglio professionale del magistrato impone una trattazione istituzionale e al contempo semplice di principi contabili di

"Come questo Consiglio ha affermato nella risoluzione del 1 dicembre 1994, adottata con il consenso di quasi tutti i suoi componenti e sotto la Presidenza e con il contributo

Credo che ci debba essere sicuramente, da parte di tutti noi, una maggiore attenzione per far sì che il cittadino, che percepisce oggi una situazione così come è stato

 -n. 17 del 14.02.2019 ad oggetto: "Variazione al Piano Esecutivo di Gestione in recepimento della delibera consiliare n. 32 del 21.03.2019 ad oggetto: "Variazioni al

La penna ai soci — Kartisti si nasce.. 1000… che numero, mille come gli anni che cantano i Nomadi in un loro recente successo, mille lire che quando ero piccolo era- no un

contenute agli artt.4, 5 e 9, sui tempi della fase istruttoria e della decisione, rendono effettivo, nei procedimenti di riconoscimento di infermità o lesione dipendente da causa

Infatti, è leggermente aumentata la percentuale delle imprese che si attendono un aumento del fatturato nel corso del prossimo trimestre (dal 12,6 al 18,4 per cento), ma