Sobes.tech
Junior

Este blocul finally întotdeauna executat în construcția try-catch?

sobes.tech AI

Răspuns de la AI

Nu, nu întotdeauna. finally poate să nu fie executat în următoarele cazuri:

  • Încheierea JVM în timpul execuției blocului try sau catch. De exemplu, la apelarea System.exit().
  • Eșecul JVM (de exemplu, eroare de memorie insuficientă sau depășire a stivei).
  • Un ciclu infinit în blocul try sau catch.
  • Încheierea thread-ului care execută blocul try-catch-finally.

În alte cazuri, chiar dacă se aruncă o excepție unchecked sau se face return din blocul try sau catch, blocul finally va fi executat.

public class FinallyExample {

    public static void main(String[] args) {
        try {
            System.out.println("În blocul try");
            // Ieșire din JVM înainte de a executa finally
            // System.exit(0);
            throw new RuntimeException("Excepție forțată");
        } catch (RuntimeException e) {
            System.out.println("În blocul catch: " + e.getMessage());
            // Return din catch, finally tot va fi executat
            // return;
        } finally {
            System.out.println("În blocul finally"); // Acest cod se execută
        }
        System.out.println("După try-catch-finally"); // Acest cod poate să nu fie atins
    }
}