Salve, scrivo ancora in questo forum per un altro piccolo aiuto. Ho alcuni TEST da fare e tra le tante domande mi viene posta la seguente:

class ColorException extends Exception {}
class WhiteException extends ColorException {}
class White {
void m1() throws ColorException {throw new WhiteException();}
void m2() throws WhiteException {}
public static void main (String[] args) {
White white = new White();
int a,b,d,f; a = b = d = f = 0;
try {white.m1(); a++;} catch (ColorException e) {b++;}
try {white.m2(); d++;} catch (WhiteException e) {f++;}
System.out.print(a+","+b+","+d+","+f);
}}

Ho dato la mia risposta, 0,1,0,1... poi vado a vedere il risultato finale e la risposta corretta era:

0,1,1,0... ecco adesso non capisco il motivo...

l'oggetto white, va a chiamare il metodo m1, che lancia l'eccezione ColorException, l'incremento della variabile a, non viene eseguito, in quanto nel momento in cui viene catturato un'eccezione nel try, tutto quello che c'è dopo sempre all'interno di questo codice non viene considerato. Passo al blocco catch, qui ColorException viene gestito e quindi b viene incrementato di 1. Passo al metodo m2, lancia un WhiteException, d++ è all'interno del try, quindi non dovrebbe essere eseguito anche perchè il catch cattura l'eccezione WhiteException, quindi dovrebbe incrementare f++...ovviamente questo mio ragionamento non è corretto in quanto il risultato che mi aspettavo non si è dimostrato tale qualcuno potrebbe spiegarmi il motivo per il quale il risultato sia 0,1,1,0?

Grazie in anticipo.