Sobes.tech
Junior

O bloco finally é sempre executado na construção try-catch?

sobes.tech IA

Resposta da IA

Não, nem sempre. finally pode não ser executado nos seguintes casos:

  • Encerramento da JVM durante a execução do bloco try ou catch. Por exemplo, ao chamar System.exit().
  • Falha na JVM (por exemplo, erro de memória ou estouro de pilha).
  • Um ciclo infinito no bloco try ou catch.
  • Encerramento da thread que executa o bloco try-catch-finally.

Em outros casos, mesmo que uma exceção não verificada seja lançada ou que haja um retorno do bloco try ou catch, o bloco finally será executado.

public class FinallyExample {

    public static void main(String[] args) {
        try {
            System.out.println("No bloco try");
            // Encerrar a JVM antes de executar finally
            // System.exit(0);
            throw new RuntimeException("Exceção forçada");
        } catch (RuntimeException e) {
            System.out.println("No bloco catch: " + e.getMessage());
            // Retornar do catch, finally ainda será executado
            // return;
        } finally {
            System.out.println("No bloco finally"); // Este código é executado
        }
        System.out.println("Após try-catch-finally"); // Este código pode não ser alcançado
    }
}