[Corsopoc] info generali per esonero
cantone
cantone@copernico.uniroma2.it
Fri, 24 Jan 2003 20:26:20 +0100
At 20.09 24/01/03 +0100, you wrote:
>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]}
>{
>}
Mi aspetterei di leggere:
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());
> }
> }
>}
>
>
>
>
>
>
>_______________________________________________
>Corsopoc mailing list
>Corsopoc@list.uniroma2.it
>http://list.uniroma2.it/mailman/listinfo/corsopoc