Newsgroup: it.comp.java
Titolo: Chiarimento!!!!

Salve a tutti,
volevo fare una semplice domanda: a cpsa serve esattamente il finally? mi
spiego meglio: se io ho questo pezzo di codice
try
{
    throw new Exception();
}
catch (Exception e )
{
    System.out.println("ECCEZZIONE");
}
finally
{
    System.out.println("FINALLY");
}
e poi quest'altro
try
{
    throw new Exception();
}
catch (Exception e )
{
    System.out.println("ECCEZZIONE");
}
System.out.println("FINALLY");
non dovrebbero stampare entrambi
ECCEZIONE
FINALLY
magari l'esempio non č calzante, se trovte qualcosa che mi faccia capire
meglio vi sarei grato....
ancora ciao

 meglio vi sarei grato....
Per puntualizzare, ci sono alcuni rari casi in cui è
richiesto l'utilizzo di un blocco finally dopo il try/catch.
A questo riguardo ti rimando alla documentazione -->
http://java.sun.com/docs/books/tutorial/essential/exceptions
/finally.html
ByeZ

>     System.out.println("ECCEZZIONE");
per la cronaca in italiano si scrive: eccezione.
:-)

FINALLY
E invece li stampano entrambi per due ragioni diverse.
Il primo, perchč il blocco finally viene eseguito comunque anche in
caso di eccezione.
Il secondo, per normale flusso del programma. L'istruzione sta appena
dopo il blocco catch, siccome all'interno del blocco catch non c'č
nessuna interruzione l'istruzione viene eseguita.
Non viene eseguita in questi casi:
try {
	throw new Exception();
	System.out.println("FINALLY);
}catch(Exception e) {
	System.out.println("ECCEZIONE);
}
e:
try {
	throw new Exception();
}catch(Exception e) {
	System.out.println("ECCEZIONE);
	return -1;
}
System.out.println("FINALLY);
mentre viene eseguita anche in questo caso diverso:
try {
	throw new Exception();
}catch(Exception e) {
	System.out.println("ECCEZIONE);
	return -1;
} finally {
	System.out.println("FINALLY);
}

eseguito, 
Ovviamente questo non è vero. Dipende da quello che avviene dentro il
blocco catch.
Esempio banale:
try{
	... more code...
	if(x != y)
		throw new Exception();
} catch(Exception e) {
	log("E' successo un errore: "+e.getMessage());
	throw e;
}
System.out.println("Scriverò?");

 fanno direttamente a meno (^___^).
perche non sanno come funziona... :) sorry, ma te la sei cercata.
uL

fanno direttamente a meno (^___^).
Diciamo che io uso l'istruzione finally quando serve. 
Per l'eleganza uso le cravatte, non le istruzioni.
Nessuno degli esempi e i commenti che ho letto in questo thread
calzava correttamente sull'uso dell'istruzione finally, da cui deduco
che il problema principale è sapere a che serve.

 }
si ok....ma io non avrei mai messo il return -1 nel catch; anche perchč se
vai a compilare questo codice al 90% dei casi (non ho provato prima di
scrivere....) ti dice che manca il return del metodo.....
cmq ancora non sono convinto dell'utilitą e soprattutto non riesco a
immaginare una situazione in cui il finally č ESSENZIALE per il correto
funzionamento del metodo/programma......

funzionamento del metodo/programma......
Dai un'occhiata al tutorial:
http://java.sun.com/docs/books/tutorial/essential/exceptions/finally.html
Esiste sicuramente l'alternativa ad usare finally, come esiste
l'alternativa ad usare le eccezioni e altre caratteristiche del
linguaggio. Come sempre bisogna vedere quale soluzione porta ad un
codice solido e manutenibile. Per solido intendo intendo un programma
che *sicuramente* esegue un cleanup degli stati anche in caso di
eccezione. Manutenibile intendo che questo cleanup non sia disperso in
più punti del programma.

 blocco catch.
...
Evidentemente. Si intendeva il caso in cui l'eccezione non
veniva sollevata o che il coder non avesse l'intenzione di
sospendere l'esecuzione del codice dopo il blocco catch.
ByeZ.

 uL
riposto:
http://java.sun.com/docs/books/tutorial/essential/exceptions
/finally.html .
C'è altro da sapere per un corretto utilizzo del finally?
Sono tutt'orecchie.
ByeZ

 che il problema principale è sapere a che serve.
Allora vorrai certamente illuminarci.
ByeZ.

:-)
E infatti dopo scrive bene:)
Cmq, una regola della netiquette dice che non bisogna mai
far notare errori di ortografia!:)
-- 
WEbdOM webmaster di
Metronic.It mobile phone philosophy
www.gadgetpoint.it
 serigrafia on line

 ByeZ
Non deve essere un bel vedere...
comunque, se nel tuo gruppo si evita l'uso del finally, che e' una 
parola chiave abbastanza importante, sono problemi vostri. Ma venirlo a 
spacciare su un ng dedicato a Java come una best practice "perche' me 
l'hanno detto i miei colleghi" mi sembra un po' eccessivo.
Che ne dici?
uL

 uL
Dico che il presupposto è sbagliato (come accenntato poco
fa'). Non me l'ha detto nessuno, è una mia abitudine.
Passando al concreto, avresti la cortesia di farmi un
esempio nel quale a tuo dire è consigliabile l'uso del
finally?("parola chiave abbastanza importante"(cit), che
immagino userai frequentemente).
ByeZ.

Replicare con Re: , please.
tityrus

Credo di capire che tu sei uno di quei programmatori, che non da molto
peso all'eleganza formale del codice: sono gli stessi che magari
sostengono che l'indentazione del codice non è importante :-).
Di seguito un'esempio che renderlo senza finally risulta molto brutto.
    public DatiSQL eseguiQuery()
    {
        DBConnectionManager dbManager = null;
        Connection con=null;
        try
        {
            dbManager = DBConnectionManager.getIstance();
            con = dbManager.getConnessione();
            eseguiQueryTrans(con);
        }
        catch(Exception e)
        {
            log.stampa("MotoreSql.eseguiQuery - Errore:
"+e.getMessage(),WARNING);
        }
        finally
        {
            dbManager.freeConnection(con);
        }
        return datiSql;
    }
se dbManager.freeConnection(con); non viene inserita in una finally devi
replicare questa istruzione per ogni catch (non è molto bello).
Ciao,
Mauro
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Merci per la delucidazione.
ByeZ

 far notare errori di ortografia!:)
A me sembra che non si debbano sottolineare gli errori di battitura!
E direi che quelli ortografici non sempre sono di battitura (ha sbagliato 4
volte!).