Como evitar vazamento de recursos com o try-with-resources em Java
O try-with-resources é um recurso introduzido no Java 7 que permite que objetos que implementam a interface
ou java.lang.AutoCloseable
, como conexões de banco de dados ou arquivos, sejam gerenciados automaticamente e fechados corretamente, sem a necessidade de usar um bloco finally.java.io.Closeable
A interface
é uma interface funcional introduzida no Java 7 que define um único método AutoCloseable
, que é chamado quando um recurso precisa ser fechado. A interface close()
é uma subinterface de Closeable
que adiciona o método AutoCloseable
à exceção close()
.IOException
Portanto, qualquer recurso externo que implemente a interface
ou AutoCloseable
, pode ser usado com o try-with-resources. Alguns exemplos comuns de recursos que podem ser usados com o try-with-resources são: Closeable
, FileReader
, BufferedReader
, FileWriter
, BufferedWriter
, Socket
, ServerSocket
, Connection
, Statement
, entre outros.ResultSet
Exemplo de implementação em Java
Para usar o try-with-resources, basta declarar o recurso no cabeçalho do bloco try, seguido pelo bloco de código que irá utilizar o recurso. O recurso será automaticamente fechado quando o bloco try for concluído, independentemente se ocorreu uma exceção ou não. Aqui está um exemplo de como usar o try-with-resources com um
e FileReader
para ler um arquivo de texto:BufferedReader
try (FileReader reader = new FileReader("arquivo.txt");
BufferedReader br = new BufferedReader(reader)) {
String linha;
while ((linha = br.readLine()) != null) {
System.out.println(linha);
}
} catch (IOException e) {
e.printStackTrace();
}
Neste exemplo, declaramos dois recursos: um
e um FileReader
. Quando o bloco try é iniciado, o arquivo é aberto e o buffer é criado. Dentro do bloco try, podemos ler o conteúdo do arquivo usando o método BufferedReader
do readLine()
.BufferedReader
No final do bloco try, não precisamos nos preocupar em fechar o arquivo e o buffer explicitamente, pois o Java irá fechá-los automaticamente. Isso é útil porque evita que esqueçamos de fechar um recurso e causemos um vazamento de recursos ou corrupção de dados.
Além disso, o try-with-resources é mais conciso do que a versão anterior usando um bloco finally. Podemos realizar as mesmas tarefas com menos código e mais legibilidade.
Conclusão
Em resumo, o try-with-resources é uma adição útil e importante ao Java, que facilita a gestão de recursos externos. Com ele, podemos garantir que os recursos sejam abertos e fechados corretamente, mesmo em caso de exceção. Se você ainda não está usando o try-with-resources em seu código Java, agora é a hora de começar a usá-lo!