Avatar ·

O bloco finally sempre é executado? Armadilhas da JVM e System.exit()

Olá a todos! Sou novo em Java e estou tentando entender o tratamento de exceções. O bloco `finally` me confunde. Nos livros, dizem que ele sempre é executado, independentemente de haver uma exceção ou não. Mas encontrei alguns exemplos onde isso parece não ser verdade. Por exemplo, este código: ```java public class FinallyTest { public static void main(String[] args) { try { System.out.println("No try"); System.exit(0); } catch (Exception e) { System.out.println("No catch"); } finally { System.out.println("No finally"); } } } ``` Eu esperava ver "No finally", mas o programa simplesmente terminou sem essa saída. Por quê? `System.exit(0)` não é uma exceção, é um encerramento normal. E outro exemplo. Se houver um `return` no bloco `try`, o `finally` ainda será executado? Ouvi dizer que sim, mas quero ter certeza. E o que acontece se o `finally` também lançar uma exceção? Ela sobrescreverá a exceção do `try`?