codice:
class Ecc1 extends Exception {}
class Ecc3 extends Exception {}
class A {
public void p (int i) throws Ecc3 {
System.out.println ("- A, p: istr0 -");
if (i == 0) throw new Ecc3 ();
i--;
System.out.println ("- A, p: istr1 -");
}
public void m (int i) throws Ecc1 {
System.out.println ("- A, m: istr0 -");
try {
if (i == 0) throw new Ecc1 ();
i--;
System.out.println ("- A, m: istr1 -");
this.p(i);
System.out.println ("- A, m: istr2 -");
}
catch (Ecc3 ecc) {
System.out.println ("- A, m: istr3 -");
}
System.out.println ("- A, m: istr4 -");
}
}
class B extends A {
public void p (int i ) throws Ecc3 {
System.out.println ("- B, p: istr0 -");
try {
System.out.println ("- B, p: istr1 -");
if (i == 0) throw new Ecc3 ();
i--;
System.out.println ("- B, p: istr2 -");
}
catch (Ecc3 e) {
System.out.println ("- B, p: istr3 -");
}
System.out.println ("- B, p: istr4 -");
}
}
public class EsempioEccezioni {
public static void main (String [] args) throws Ecc1 {
int i = 1;
A a = new B () ;
System.out.println ("- main: istr0 -");
a.m(i);
System.out.println ("- main: istr1 -");
}
}
Con i=1 e a di tipo A (A a = new A) mi stampa:
- main istr 0 -
eseguo a.m(1)
- A, m: istr0 -
- A, m: istr1 -
eseguo this.p(0)
- A, p: istr0 -
- A, p: istr3 -
- A, p: istr4 -
- main istr 1 -
Con i=1 e a di tipo B (A a = new B) mi stampa:
- main istr 0 -
eseguo a.m(1)
- A, m: istr0 -
- A, m: istr1 -
eseguo this.p(0)
- B, p: istr0 -
- B, p: istr1 -
- B, p: istr3 -
- B, p: istr4 -
- A, m: istr2 -
- A, m: istr4 -
- main istr 1 -
Perchè nel primo caso dopo aver stampato - A, m: istr4 - sono uscito e non ho continuato nella riga sotto this.p(0) mentre nel secondo caso dopo aver stampato - B, p: istr4 - abbiamo continuato sotto this.p(0)????????