Pular para o conteúdo principal
Módulo 5 · Lição 2 de 210/14 no curso~12 min
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.

Java
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 occurs

Declarando 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.

Java
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().

Java
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

Exercício#java.m5.l2.e1
Tentativas: 0Carregando…

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'.

Carregando editor…
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

Exercício#java.m5.l2.e2
Tentativas: 0Carregando…

Instancie o recurso personalizado CustomResource dentro de um bloco try-with-resources, invoque o método doWork() nele e trate Exception imprimindo 'Error'.

Carregando editor…
Mostrar dica

Use `try (CustomResource res = new CustomResource())` e chame `res.doWork();` dentro dele.

Solução disponível após 3 tentativas

Exercício#java.m5.l2.e3
Tentativas: 0Carregando…

Declare FirstResource e SecondResource na mesma construção try-with-resources. Lide com exceção imprimindo 'Erro'.

Carregando editor…
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