• 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

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

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