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 :
et le résultat de ce superbe code est :
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é"); } }
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 ?
Partager