Return Try/Catch e Finally

DOMANDA:

Ho due return, uno all'interno del blocco try e uno nel finally:


package ritornofinally;

public class Ritorno {
   public static boolean ritorno(){

      boolean valore;

      try{
          valore = true;
          return valore;
       } catch(Exception e) {
          e.printStackTrace();
       } finally {
          return false;
       }
   }
}

Quale dei due valori viene restituito?


RISPOSTA:

Facciamo un breve ragionamento logico per arrivare alla risposta.
Il finally viene eseguito poco prima del rilascio del controllo sul try/catch, quindi, nel nostro caso subito prima del return contenuto all'interno del try (il "return valore" viene quindi lasciato in sospeso in attesa di terminare il finally).
Durante l'esecuzione del finally incontro un return che mi restituisce il controllo al chiamante ancor prima di eseguire il return contenuto nel blocco try.

Quindi la risposta è che verrà restituito il valore all'interno del finally (nell'esempio "false") come potete provare con la classe TestReturn qui di seguito:

package ritornofinally;

public class TestReturn {
   public static void main(String[] args) {
         System.out.println(Ritorno.ritorno());
   }
}

Commenti

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java