PDA

View Full Version : [JAVA] Dubbietto su effetti della clausola finally


D4rkAng3l
03-05-2009, 18:05
A lezione presi questi appunti ma ora non mi ricordo più il perchè di quello che ho scritto doh :mc:

Se ho un codice del tipo (molto sommario e parziale):

Una classe Base:


public Class Base{
public Base throws BaseException{ // Il costruttore potrebbe sollevare una BaseException di tipo checked
.....
.....
.....
}
}


ed una classe UsaBase:


public Class UsaBase{

Base b; // Dichiara una variabile di tipo Base

public UsaBase(){ // Costruttore
try{
b = NewBase; // Nel try perchè il costruttore di Base potrebbe sollevare una BaseException
}catch(BaseExcepion e){System.out.println("Nel Catch");}
finally{System.out.println("Nel finally");}

System.out.println("Nel costruttore");
}

public static void main(...){
UsaBase x = new UsaBase();
}

}


Sugli appunti ho scritto: il messaggio del catch non viene visualizzato perchè l'eccezione non è mai sollevata e non si entra mai nel blocco finally....

Perchè sta cosa

Il costruttore di Base potrebbe sollevare una BaseException.

Nel metodo main dichiato una variabile x di tipo UsaBase e la creo --> viene invocato il costruttore della classe UsaBase che prova ad eseguire il blocco try catch assegnando a b di tipo Base l'eventuale riferimento ad un nuvo oggetto istanza di Base...ma il costruttore di Base può sollevare l'eccezione...quindi secondo me se il costruttore di Base solleva l'eccezione nel costruttore di UsaBase viene catturata e stampato: "Nel Catch" e "Nel Finally"

o c'è qualche cosa che mi sfugge?

Grazie
Andrea

DanieleC88
03-05-2009, 19:36
Il blocco del finally viene eseguito in entrambi i casi (con o senza eccezione).

ciao ;)

wingman87
03-05-2009, 20:35
quindi secondo me se il costruttore di Base solleva l'eccezione nel costruttore di UsaBase viene catturata e stampato: "Nel Catch" e "Nel Finally"

o c'è qualche cosa che mi sfugge?

Grazie
Andrea
E' giusta la tua intuizione, forse nell'esempio del prof anche se il costruttore di Base era dichiarato con la clausola throws questo non lanciava mai l'eccezione.
EDIT: non avevo visto questo:
Sugli appunti ho scritto: il messaggio del catch non viene visualizzato perchè l'eccezione non è mai sollevata e non si entra mai nel blocco finally....
Nel blocco finally ci entri comunque

shinya
04-05-2009, 08:19
Sugli appunti ho scritto: il messaggio del catch non viene visualizzato perchè l'eccezione non è mai sollevata e non si entra mai nel blocco finally....
Se gli appunti li ha scritti lo stesso professore che ha scritto quell'orrendo pezzo di codice che hai incollato nell'altro post, non mi meraviglio più di tanto.