Onde na manipulação de exceções pode ser usada a construção com finally?
sobes.tech IA
Resposta da IA
A construção finally é usada para executar um código que deve ser executado independentemente de uma exceção ter sido lançada e se ela foi capturada. Isso garante a liberação de recursos ou a execução de outras ações obrigatórias.
Cenários típicos de uso de finally:
-
Fechar recursos: Liberar ficheiros, ligações de rede, ligações a bases de dados, etc., que foram abertos no bloco
try.// Fechar ficheiro FileInputStream fis = null; try { fis = new FileInputStream("myfile.txt"); // Leitura do ficheiro } catch (FileNotFoundException e) { // Tratamento da exceção } finally { if (fis != null) { try { fis.close(); // Fecho garantido do fluxo } catch (IOException e) { // Tratamento da exceção ao fechar } } } -
Restaurar o estado: Reverter alterações ou devolver o sistema ao seu estado original após uma operação potencialmente mal-sucedida.
-
Registo: Registar informações sobre a execução da operação, mesmo que uma exceção tenha ocorrido.
-
Libertar bloqueios: Remover bloqueios adquiridos no bloco
try.
É importante lembrar que o código em finally será executado mesmo que no bloco try ou catch haja uma saída do método (usando return, break ou continue) ou uma nova exceção seja lançada. No entanto, se o programa terminar devido a uma chamada a System.exit() ou a um erro grave do sistema (por exemplo, OutOfMemoryError), o bloco finally pode não ser executado.
Nas versões modernas do Java (a partir do Java 7), para fechar recursos automaticamente, é preferível usar a construção try-with-resources, que é uma forma mais limpa e segura de gerir recursos.
// Uso de try-with-resources
try (FileInputStream fis = new FileInputStream("myfile.txt")) {
// Leitura do ficheiro
} catch (IOException e) { // Captura FileNotFoundException, herdada de IOException
// Tratamento da exceção
} // O recurso fis será fechado automaticamente