PDA

View Full Version : [JAVA] differenze throws o try-catch


cloutz
08-04-2011, 11:58
Salve a tutti :D
Sono uno studente universitario di informatica, studiando sul Savitch non mi è chiara una cosa:
quando mi conviene usare la clausula throws e quando gestire l'eccezione con try-catch?

La cosa conveniente di usare il throws è che sollevo un'eccezione che dovrà esser controllata dal chiamante (o chi per esso), mentre il try-catch mi permette di gestire immediatamente e nel metodo attuale l'eccezione.

Ma perchè è più conveniente talvolta la clausula throws e delegare l'eccezione?
Per migliorare la leggibilità del chiamante qualora non venisse sollevata alcuna eccez?
Per poter riutilizzare i metodi?
È solo una cosa stilistica, di ordine?
Io se penso alla gestione dell'eccezione in maniera naturale la penso in try-catch, senza throws:boh:

se mi faceste un esempio di codice, uno scenario facile facile, in cui conviene usare l'uno o l'altro ve ne sarei molto grato (il codice è la parte più chiara talvolta) :)

Saluti

markz88
21-07-2013, 19:27
UP :D

Ragazzi servirebbe anche a me sapere quando conviene usare Throws e quando un blocco Try/Catch

PHØΞИIX
22-07-2013, 09:37
La clausola throws va utilizzata nel caso in cui si vuole gestire un'eccezione nello stesso modo in cui è gestita dalle superclassi o nel caso in cui si voglia far gestire l'eccezione dal sistema.
Il blocco try-catch va invece utilizzato se si vuole che un'eccezione sia gestita differentemente da come sopra descritto.

Esempio: devo fare una conversione di un numero da stringa a intero. Mi interessa che le eccezioni di NullPointerException e di NumberFormatException vengano stampate a video e il programma ritorni 0. La gestione di ogni altra eccezione invece non mi interessa.
Il metodo di conversione dovrà essere impostato in questo modo.


public Integer conversioneStringInteger(String numStr) throws Exception {

Integer numInt;

try {
numInt = Integer.parseInt(numStr);
catch (NullPointerException npeEx) {
System.out.println("NullPointerException raised" + npeEx.getMessage());
return 0;
} catch (NumberFormatException nfEx) {
System.out.println("NumberFormatException raised" + nfEx.getMessage());
return 0;
}

return numInt;

}