Boa noite, Elias! Como vai?
Para responder a sua pergunta, vamos dar uma olhada nesse código aqui:
try {
metodo1();
System.out.println("try");
return;
} catch (Exception e) {
System.out.println("catch");
}
System.out.println("finally");
A palavra "finally" será impressa ou não?
A resposta é depende! Se o metodo1()
não lançar uma Exception
o return
será executado e o "finally" não será impresso. Portanto, nesse caso, "finally" só aparecerá caso ocorra uma Exception
na execução do metodo1()
. Agora, imagine se "finally" representasse a liberação de um recurso mto custoso! Vc ficaria refém de ocorrer ou não a Exception
para liberar esse recurso e isso é péssimo!
É por esse motivo que o bloco finally
se faz necessário! Inclusive a documentação do Java ressalta a sua utilidade quando diz:
The finally block always executes when the try block exits. This ensures that the finally block is executed even if an unexpected exception occurs. But finally is useful for more than just exception handling — it allows the programmer to avoid having cleanup code accidentally bypassed by a return, continue, or break. Putting cleanup code in a finally block is always a good practice, even when no exceptions are anticipated.
Ou seja, colocar código de finalização dentro do bloco finally
é uma boa prática pq torna o nosso código mais seguro!
Extra: Desde o Java 7 há uma nova forma de utilizar o try
, chamada try-with-resources
. Na página do link que coloquei aqui no meu comentário há um outro link levando para a documentação da Oracle sobre o try-with-resources
. Dê uma passada lá e aproveite para conhecer esse recurso caso ainda não o conheça!
Grande abraço e bons estudos!