Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 Cultura Informatica
 Corso di java
 Eccezioni
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore Discussione Precedente Discussione Discussione Successiva  

genius
dott. ing. cav. ...FN

Genio


Regione: Puglia
Prov.: Bari
Città: Molfetta - Caput Mundi


Inserito il - 02/06/2007 : 18:40:56  Mostra Profilo  Visita l'Homepage di genius  Clicca per vedere l'indirizzo MSN di genius  Invia a genius un messaggio Yahoo! Invia a genius un Messaggio Privato  Rispondi Quotando
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  Mostra Profilo  Visita l'Homepage di Aiace  Rispondi Quotando
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
Torna all'inizio della Pagina

feeb
Cantù Che Conta Col Cayenne

neophyte

Prov.: Zara


Inserito il - 11/06/2007 : 12:04:16  Mostra Profilo  Visita l'Homepage di feeb  Clicca per vedere l'indirizzo MSN di feeb Invia a feeb un Messaggio Privato  Rispondi Quotando
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/
Torna all'inizio della Pagina

genius
dott. ing. cav. ...FN

Genio


Regione: Puglia
Prov.: Bari
Città: Molfetta - Caput Mundi


Inserito il - 11/06/2007 : 12:09:53  Mostra Profilo  Visita l'Homepage di genius  Clicca per vedere l'indirizzo MSN di genius  Invia a genius un messaggio Yahoo! Invia a genius un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

Aiace
Piccolo Cinema Onirico


Regione: Puglia
Prov.: Bari


Inserito il - 11/06/2007 : 12:11:13  Mostra Profilo  Visita l'Homepage di Aiace  Rispondi Quotando
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
Torna all'inizio della Pagina
  Discussione Precedente Discussione Discussione Successiva  
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,24 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000