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)????????