Autore |
Discussione |
|
genius
dott. ing. cav. ...FN
Regione: Puglia
Prov.: Bari
Città: Molfetta - Caput Mundi
|
Inserito il - 02/06/2007 : 18:40:56
|
In questa discussione verranno discusse le problematiche relative l'uso delle eccezioni in java.
Trattamento delle eccezioni. Per migliorare la stabilità dei programmi e separare la gestione di situazioni di errore dal normale flusso di esecuzione, tutti i linguaggi moderni implementano un sistema di gestione delle eccezioni. Questa gestione in java è molto semplice. Vediamola insieme.
- Eccezioni ed Errori
Iniziamo a distinguere eccezioni ed errori. - Un'eccezione è una situazione di errore "recuperabile". Questo significa che dallo stato di eccezione è possibile tornare allo stato di esecuzione "normale".
- Un errore è una situazione di errore non recuperabile. Una volta entrati in una situazione di errore il programma viene terminato.
- Cos'è un'eccezione
In java una eccezione è un oggetto della classe Exception o di una sua sottoclasse (per esempio IOException). Questo meccanismo permette di definire le proprie eccezioni ed usarle proprio come quelle "built in" di java. - Catturare le eccezioni
Le porzioni di codice che possono lanciare eccezioni devono essere eseguite in blocchi try. ...
try{
// codice che può sollevare un'eccezione
}catch (Exception e) {
// codice per gestire l'eccezione
}finally{
// codice che si vuole eseguire a prescindere dal
verificarsi dell'eccezione
// per es. chiudere un socket o una connessione al db
}
... A questa regola esiste però un'eccezione (scusate il gioco di parole :D). Tutte le Exception di classe RuntimeException o sottoclassi, non devono necessariamente essere racchiuse in blocchi try. Un esempio di questo tipo di eccezione è la NumberFormatException, sollevata quando si prova a fare il parsing di una stringa che non è un numero. - Sollevare un'eccezione
Per sollevare da codice un'eccezione sono necessarie due cose: dichiarare che il metodo può lanciare eccezioni di un certo tipo, inserire nel metodo il codice per lanciare l'eccezione. Per esempio, diciamo che il metodo pippo possa lanciare una IOException. Il codice per fare questo è il seguente:
public void metodoPippo() throws IOException{
...
if(siVerificaUnaCondizione)
throw new IOException("Si è verificata la condizione di errore nel metodo 'metodoPippo'");
... // altro codice
}
La prima porzione di codice in grassetto rappresenta il modo di dichiarare che un metodo può lanciare un determinato tipo di eccezione (Per le RuntimeException questa dichiarazione può essere omessa). Se un metodo può lanciare più eccezioni basta scriverle una dietro l'altra separate da ','. La seconda porzione è il lancio dell'eccezione. Se determinate condizioni sono errate per la nostra logica, lanciamo un'eccezione con un messaggio (possibilmente significativo per capire il tipo di errore).
"...e se non hai morale e se non hai passione se nessun dubbio ti assale perché la sola ragione che ti interessa avere è una ragione sociale soprattutto se hai qualche dannata guerra da fare non farla nel mio nome non farla nel mio nome che non hai mai domandato la mia autorizzazione se ti difenderai non farlo nel mio nome che non hai mai domandato la mia opinione..."
|
|
Aiace
Piccolo Cinema Onirico
Regione: Puglia
Prov.: Bari
|
Inserito il - 11/06/2007 : 11:07:15
|
Questioncina:
Ho un metodo che contiene questo codice:
try{ ContiCorrentiBancari.prelievo(nconto, importo); JOptionPane.showMessageDialog(null,"Il prelievo è stato effettuato."); } catch(OltreLimitePrelievoException olpe){ ... }
(è importante dire che questo codice non mi dà errore, quindi vuol dire che secondo il compilatore il catch è raggiungibile, cioè quell'eccezione in effetti può essere sollevata)
In neretto, l'istruzione che chiama un il metodo prelievo:
static public void prelievo(int nconto,float importo) throws OltreLimitePrelievoException { ... try{... ... if (importo > ccb.saldo()) throw new OltreLimitePrelievoException(); ... ...} catch(OltreLimitePrelievoException olpe){ ... }
Questa è la classe dell'eccezione:
public class OltreLimitePrelievoException extends Exception { public OltreLimitePrelievoException() { JOptionPane.showMessageDialog(null,"L'importo selezionato supera il saldo del conto."); } }
Ora, quando l'eccezione viene sollevata nel metodo prelievo, tutto funziona bene; però perchè nel metodo in alto, nonostante la try-catch, l'eccezione è come se non viene rilevata?
In pratica, vengono visualizzate tutte e due le dialog, prima quella che contiene "L'importo selezionato supera il saldo del conto" ( e poi quella che contiene "Il prelievo è stato effettuato".
Ringrazio chi può aiutarmi. |
Modificato da - Aiace in data |
|
|
feeb
Cantù Che Conta Col Cayenne
Prov.: Zara
|
Inserito il - 11/06/2007 : 12:04:16
|
Citazione: Messaggio inserito da Aiace
static public void prelievo(int nconto,float importo) throws OltreLimitePrelievoException { ... try{... ... if (importo > ccb.saldo()) throw new OltreLimitePrelievoException(); ... ...} catch(OltreLimitePrelievoException olpe){ ... }
non ho capito qui cosa stai facendo
perchè, se vuoi propagare l'eccezione OltreLimitePrelievoException verso l'alto (static public void prelievo(..) throws OltreLimitePrelievoException) allo stesso tempo la "catchi" all'interno del metodo (catch(OltreLimitePrelievoException olpe)) ? |
http://www.avaaz.org/it/ - http://www.flickr.com/photos/dimethyltryptamine/ |
|
|
genius
dott. ing. cav. ...FN
Regione: Puglia
Prov.: Bari
Città: Molfetta - Caput Mundi
|
Inserito il - 11/06/2007 : 12:09:53
|
semplicemente perkè nel metodo prelievo catturi l'eccezione, quindi nn viene + propagata...
cmq ribadisco ke questa non è la sezione esatta... qui vanno discussi i dubbi relativi al linguaggio...
tnx |
"...e se non hai morale e se non hai passione se nessun dubbio ti assale perché la sola ragione che ti interessa avere è una ragione sociale soprattutto se hai qualche dannata guerra da fare non farla nel mio nome non farla nel mio nome che non hai mai domandato la mia autorizzazione se ti difenderai non farlo nel mio nome che non hai mai domandato la mia opinione..."
Un blog farlocco |
|
|
Aiace
Piccolo Cinema Onirico
Regione: Puglia
Prov.: Bari
|
Inserito il - 11/06/2007 : 12:11:13
|
Citazione:
cmq ribadisco ke questa non è la sezione esatta... qui vanno discussi i dubbi relativi al linguaggio...
Oops, scusami.. non so se puoi spostare questi messaggi nella sezione apposita..Grazie e grazie per la risposta a te e a feeb
|
Modificato da - Aiace in data |
|
|
|
Discussione |
|