[Corsopoc] info generali per esonero
Andrea De Santis
dsa@arealazio.com
Fri, 24 Jan 2003 20:09:43 +0100
Hi!
> 2)(entriamo più nello specifico) un metodo che ipoteticamente sollevi più
> eccezioni può avere una segnatura del genere?
> public void metodo1() throws Exception1, Exception2 {...}
> ovvero: può un metodo sollevare più eccezioni e se si, è questo con le
> virgole il modo corretto di segnalarlo?
Dal manuale java leggo:
tipo nome (argomenti) throws tipo_Throwable,{[Tipo_Throwable]}
{
}
Quindi suppongo di si, ad ogni modo se specifichi "throws Exception" di
fatto
riesci a propagare qualsiasi eccesione. (vedi programmino sotto)
[cut]
>Il mio dubbio a questo punto è: ma throws serve a
> dire semplicemente che questo metodo potrà sollevare un'eccezione, oppure
>a
> farmi capire che tale eccezione sollevata verrà poi propagata, ovvero
> gestita dal chiamante?
Significa appunto che può *propagare* l'eccezione! Non è detto che
la generi anche... potrebbe anche essere stata generata da un altro
metodo usato internamente, che a sua volta ha la facoltà di propagare
eccezioni.
X essere + chiaro, vedi il programmino sotto: se il valore passato al metodo
divnumero
è diverso da 5 allora viene richiamato il metodo GeneraErrore che effettua
una
divisione per zero e quindi genera l'eccezione (ArithmeticException: / by
zero).
Quest'ultima viene quindi propagata
al metodo divnumero il quale a sua volta la propaga fino al catch che è
finalmente in grado di gestirla!
Se invece il numero passato è uguale a 5, allora viene *sollevata* una
eccezione
definita dal programmatore (e quindi *propagata*...)
>in quest'ultimo caso il chiamante deputato a gestirla
> chi dovrebbe essere, l'istruzione catch che segue il blocco try da cui si
>è
> sollevata l'eccezione? (mi raccomando,occhio ai termini "sollevare" e
> "propagare", hanno una sottile ma sostanziale differenza...)
Esatto!
-----------------------------------------------------------------------
Bruttissimo ma funziona :)
-----------------------------------------------------------------------
class Errore1 extends Exception{
public Errore1(int numero) {
super("Attenzione, valore non valido! "+numero);
}
}
class prova1 {
int numero;
public void divnumero(int num) throws Exception {
if(num == 5){
throw new Errore1(5);
}
else
{
this.GeneraErrore();
}
}
public void GeneraErrore() throws Exception
{
numero=15/0;
}
}
public class eccezioni {
public static void main(String args[]) {
prova1 esempio=new prova1();
try {
esempio.divnumero(4);
}
catch(Exception _e) {
System.out.println(_e.toString());
}
}
}