bonjour à tous,

je suis en train de préparer la certif SCJP et j'en suis à regarder le fonctionnement du try/finally sans de block catch et je tombe pas hasard sur un comportement qui m'interpelle.

voici le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class TryFinallyTest{
 
         public int testMethod(){
              int i=2;
              try {
                   return i++;
              }
              finally {
                   System.out.println(i+ " dans le finally");
              }
        }
 
        public static void main(String []args){
              TryFinallyTest tft = new TryFinallyTest();
              System.out.println(tft.testMethod()+" retourné");
        }
}
et le résultat de ce superbe code est :
3 dans le finally
2 retourné

je trouve ça bizarre je m'attendais plutôt à
2 dans le finally
2 retourné
car le return est censé être éxécuté après le block finally et donc la postincrémentation n'aurait pas du entrer en jeu.

on dirait qu'en fait le return i; est mémorisé en attendant son éxécution, la post incrémentation est alors faite, le finally se lance et le return éxécuté.

est-ce vraiment le comportement dans ce type de cas ?