Sobes.tech
Junior

Il blocco finally viene sempre eseguito in una costruzione try-catch?

sobes.tech AI

Risposta dell'AI

No, non sempre. finally potrebbe non essere eseguito nei seguenti casi:

  • La terminazione della JVM durante l'esecuzione del blocco try o catch. Ad esempio, chiamando System.exit().
  • Fallimento della JVM (ad esempio, errore di memoria esaurita o overflow dello stack).
  • Un ciclo infinito nel blocco try o catch.
  • La terminazione del thread che esegue il blocco try-catch-finally.

In altri casi, anche se viene sollevata un'eccezione unchecked o si effettua un ritorno dal blocco try o catch, il blocco finally verrà eseguito.

public class FinallyExample {

    public static void main(String[] args) {
        try {
            System.out.println("Nel blocco try");
            // Uscita dalla JVM prima dell'esecuzione di finally
            // System.exit(0);
            throw new RuntimeException("Eccezione forzata");
        } catch (RuntimeException e) {
            System.out.println("Nel catch: " + e.getMessage());
            // Ritorno dal catch, finally comunque si eseguirà
            // return;
        } finally {
            System.out.println("Nel blocco finally"); // Questo codice viene eseguito
        }
        System.out.println("Dopo try-catch-finally"); // Questo codice potrebbe non essere raggiunto
    }
}