Article image

DL

Davidson Linhares12/06/2025 13:59
Compartilhe

🚨 try-with-resources ou try-finally? 🚨

    Ao trabalhar com recursos como arquivos, conexões de banco de dados ou streams, uma das responsabilidades mais críticas é garantir que eles sejam fechados corretamente. E, historicamente, a forma mais comum era o bom e velho try-finally.

    Mas... 👇

    📉 O problema do try-finally:

    Apesar de funcionar, o try-finally:

    - Torna o código mais verboso;

    - Pode esconder exceções importantes;

    - Era frequentemente mal utilizado, até por programadores experientes;

    - E se houver duas exceções (uma no try e outra no finally), a do finally engole a outra. 

    ✅ A evolução: try-with-resources

    Desde o Java 7, temos uma forma muito mais elegante de lidar com isso: o try-with-resources. Essa construção:

    - Garante que os recursos serão fechados automaticamente;

    - Permite capturar exceções suprimidas com getSuppressed() se algo der errado;

    - É mais concisa, legível e segura;

    - E aceita cláusulas catch normalmente!

    🔧 Recursos como BufferedReader, InputStream, Connection já implementam a interface AutoCloseable, então estão prontos pra serem usados nesse formato.

    📌 Exemplos nos comentários 👇 (📸 mostre seus prints com os exemplos de try-finally, try-with-resources, com múltiplos recursos e com catch);

    📣 Por fim: evite bugs difíceis de rastrear e código poluído. Use try-with-resources sempre que lidar com recursos que precisam ser fechados!

    Fonte: Java Efetivo - Joshua Bloch - Terceira Edição

    Compartilhe
    Comentários (1)
    DIO Community
    DIO Community - 12/06/2025 17:14

    Excelente, Davidson! Seu artigo sobre try-with-resources versus try-finally em Java é uma explicação super clara e relevante. É fundamental para qualquer desenvolvedor Java entender como o try-with-resources se tornou a forma mais elegante e segura de garantir o fechamento de recursos.

    Considerando que o try-finally pode esconder exceções importantes, e que "se houver duas exceções (uma no try e outra no finally), a do finally engole a outra", qual você diria que é o maior benefício do try-with-resources para a depuração de problemas em aplicações Java, além de garantir o fechamento automático dos recursos?