Lições do módulo (2/2)
Experimente com recursos
Nas versões mais antigas do Java, o gerenciamento de recursos que exigem fechamento explícito (como arquivos, conexões de banco de dados ou fluxos de rede) exigia um bloco finally obrigatório para garantir que fossem fechados. Isso levou a um código detalhado e sujeito a vazamentos.
Java 7 introduziu a instrução try-with-resources, que garante o fechamento automático de todos os recursos declarados dentro do bloco try, desde que implementem a interface AutoCloseable.
A Sintaxe
Os recursos são declarados e inicializados entre parênteses imediatamente após a palavra-chave try.
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
String line = br.readLine();
System.out.println(line);
} catch (IOException e) {
System.out.println("I/O Error: " + e.getMessage());
}
// br is closed automatically here, even if an exception occursDeclarando Vários Recursos
Você pode instanciar vários recursos dentro do mesmo bloco try, separando-os com ponto e vírgula ;. Os recursos serão encerrados na ordem inversa da sua declaração.
try (
FileReader fr = new FileReader("input.txt");
FileWriter fw = new FileWriter("output.txt")
) {
// Use resources
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
}Criando recursos personalizados
Um recurso personalizado pode ser usado em um bloco try-with-resources, desde que implemente java.lang.AutoCloseable e substitua o método close().
public class DatabaseConnection implements AutoCloseable {
public void query(String sql) {
System.out.println("Running query: " + sql);
}
@Override
public void close() {
System.out.println("Connection closed!");
}
}Experimente você mesmo
Conclua o método readFile usando a instrução try-with-resources para inicializar um BufferedReader agrupando um FileReader no caminho. No bloco catch, intercepte IOException e imprima 'Erro ao ler arquivo'.
Mostrar dica
Declare o `BufferedReader` entre parênteses logo após `try` e implemente o tratamento de `IOException`.
Solução disponível após 3 tentativas
Instancie o recurso personalizado CustomResource dentro de um bloco try-with-resources, invoque o método doWork() nele e trate Exception imprimindo 'Error'.
Mostrar dica
Use `try (CustomResource res = new CustomResource())` e chame `res.doWork();` dentro dele.
Solução disponível após 3 tentativas
Declare FirstResource e SecondResource na mesma construção try-with-resources. Lide com exceção imprimindo 'Erro'.
Mostrar dica
Separe a declaração dos dois recursos entre parênteses de `try` usando ponto e vírgula `;`.
Solução disponível após 3 tentativas