PDA

View Full Version : [JAVA] principiante con le eccezioni


Re_Kotc
27-02-2009, 18:20
ciao a tutti, sto cercando di capire come funzionano le eccezioni, vi pongo il mio problema.

ho creato una classe ProvinciaException

class ProvinciaException extends Exception {

String errore;

public ProvinciaException(String e){

super(e);
errore = e;
}

public String toString(){

return errore;
}


}

poi nella classe Provincia c'è il metodo checkProvincia che può generare quest'eccezione

public static int checkProvincia(Provincia elencoProvince[], String p) throws ProvinciaException{
...
if(check!=-1)return check;
else
throw new ProvinciaException("Non riesco a trovare la provincia inserita!");
}

è corretto questo modo di procedere? se si verifica la condizione allora lancio l'eccezione..o no?

wingman87
27-02-2009, 18:31
Mi sembra corretto. Però usa il tag CODE per scrivere il codice sul forum

PGI-Bis
27-02-2009, 18:31
E' tecnicamente corretto e, nella fattispecie, teoricamente consono.

Hai un blocco di codice impossibilitato a raggiungere il suo scopo a causa di una condizione esterna al blocco stesso (se fosse interna allora la condizione sarebbe un errore di sintassi o di significato).

Nulla quaestio, il blocco deve sparare un'eccezione.

Re_Kotc
27-02-2009, 18:41
vi ringrazio delle precisazioni e scusate se non ho usato il tag CODE :rolleyes: ...però adesso viene il problema..
nel main ho scritto:



...
public static void main(String[] args) throws ProvinciaException
...

try{
regione = Provincia.checkProvincia(elencoProv,provincia);
}catch(ProvinciaException e){
e.toString();
}
...


in teoria in questo modo se il metodo checkProvincia restituisce un eccezione non dovrebbe stamparmi l'errore?

PGI-Bis
27-02-2009, 18:45
Be', quasi.

e.toString() "converte" e in una stringa - in verità restituisce una rappresentazione testuale di e.

Devi anche stabilire che fine vuoi far fare a quella stringa. Se, come credo, intendi stamparla sulla console dei comandi, allora dirai - versione lunga:


String text = e.toString();
System.out.println(text);


Nota tuttavia chei "Throwable" Java hanno un meccanismo implicito per "stamparsi" sulla console, attivato con l'invocazione del metodo printStackTrace():


e.printStackTrace();

Re_Kotc
27-02-2009, 18:53
ok in effetti ora stampa il messaggio...grazie:) ma...domanda vitale..nonostante l'errore il flusso d'esecuzione non si interrompe..cioè mi va avanti a eseguire il codice del main pur essendo che gli ho fatto sollevare un'eccezione

wingman87
27-02-2009, 18:58
Eh no, l'eccezione l'hai "catchata". Se volevi fermare il flusso non dovevi catcharla, oppure fermarlo nel catch.

Re_Kotc
27-02-2009, 19:01
aaaah ecco cosa mi sfuggiva del tutto!...il blocco try catch gestisce l'eccezione nel senso che non blocca il flusso d'esecuzione...:P...infatti togliendolo mi da l'eccezione e interrompe l'esecuzione!...ok ora ci sono :)...grazie!